【发布时间】:2018-05-16 21:23:55
【问题描述】:
我必须编写一个程序,将整数一位数作为时间存储在一个数组中。例如 1234 是 a[0] 1, a[1] 2, a[2] 3, a[3] 4。这些数字最初将存储为 char,因此我需要将它们转换为 int 类型。目标是取 2 个长度不超过 20 位的正整数并输出数字的总和。
我必须使用纸笔相加算法。解决方案必须存储在大小为 20 的数组中,然后写入屏幕。如果输出大于大小为 20 的数组,则不应给出任何输出,屏幕应显示“整数溢出”。
到目前为止,我已经完成了这个编码:
int max;
int max_1;
char number_1[100];
int a;
int max_2;
char number_2[100];
int b;
printf( "\nEnter the total number of digits you wish to display:\n");
scanf_s( "%d", &max);
printf("\nEnter the size of the first integer you wish to add:\n");
scanf("%d", &max_1);
printf("\nEnter the first integer one number at a time seperated by spaces:\n");
while (a = 0, a < max_1, ++a)
{
scanf_s("%c", number_1[a]);
}
printf("\nEnter the size of the second integer you wish to add:\n");
scanf("%d", &max_2);
printf("\nEnter the second integer one number at a time seperated by spaces:\n");
while (b = 0, b < max_2, ++b)
{
scanf_s("%c", number_2[b]);
}
return 0;
我似乎无法弄清楚如何将输入的数字转换为实际的整数形式,因为它们都单独存储在数组中。此外,我不确定如何将整数转换回大小为 20 的数组,以及如何确定输出的大小是否为 20 或更大。
对于我的冗长问题,我深表歉意。我是编码新手,不太擅长推理。我确信有一个简单的解决方案,但是我想不出。任何 cmets、解决方案或建议都会有所帮助。
【问题讨论】:
-
两个问题:你没有正确使用
scanf,它需要一个指针来存储它读取的内容。其次,您没有正确使用scanf,因为"%c"将读取all 输入,包括空格和换行符(如果您按@ 结束每个输入,则会出现换行符987654325@ 键)。 -
哦,你也没有正确使用你的循环。您似乎想要
for循环,但这也不完全正确。总而言之,您似乎在猜测该语言的语法和用法,这绝不是一种学习的好方法。要么买一本书,任何本书,要么上几节课。 -
最后,关于字符的读取,如果你想要数字,为什么不读取数字呢?使用例如
"%1d"并读入int将解决您的转换问题,并解决您的scanf使用问题之一(因为该格式将跳过前导空白)。 -
请注意,可以使用
"%s"格式一次读取一个字符数组。 -
@Someprogrammerdude 我认为你会希望避免将数字读取为数字(尽管那会很棒)任何超过 10 位数字的东西都会溢出,而他会选择 20...