gpt4 book ai didi

c - 我想在 C 中制作程序打印每个数字的完整数字

转载 作者:行者123 更新时间:2023-12-04 10:00:09 24 4
gpt4 key购买 nike

#include <stdio.h>

int main() {
char a[1000];
int i = 0;
scanf("%s", &a);
while (a[i] != 0) {
printf("%c\n", a[i]);
i++;
}
printf("\n");
return 0;
}

“给出一个最多 1,000 位的大整数作为输入。编写一个程序,在接收到相应的整数后打印出该整数的每一位数字。”是问题所在,我不知道我的代码中有什么不完整。我得了 4/5 分。答案必须是这样的:

输入: +456
输出:
+
4
5
6

最佳答案

您的代码有两个问题:
1.

scanf("%s", &a);
参数 a已经衰减到指向数组第一个元素的指针 a -> 所以它作为参数的类型实际上是 char * .因此, &a类型为 char (*)[1000] .
与类型 char * 的预期参数存在类型不匹配为 %s转换说明符。
如果你使用 GCC 作为编译器, -Wall选项(或分别为 -Wformat= )向您显示了关于此的警告:
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[1000]' [-Wformat=]

9 | scanf("%s",&a);
| ~^ ~~
| | |
| | char (*)[1000]
| char *

2.
此外,如果您需要存储整数 向上 到 1000 位 - 包括 1000 位整数的情况,您忘记了您还需要一个元素来存储字符串终止空字符( '\0' ):
char a[1001];
否则,如果用户输入 1000 位数字,则空字符将存储在数组边界之外,这会调用未定义的行为。

此外:
如果用户尝试输入超过 1000 位的数字,请使用长度修饰符来确保不会发生缓冲区溢出:
scanf("%1000s", a);
或使用 fgets()这是默认情况下确保这一点的,因为它需要将字符数作为第二个参数写入。
fgets(a, sizeof(a), stdin);
sizeof(a)适合作为 sizeof(char)总是 1 .它获得元素的数量, a已。

结果:
#include <stdio.h>

int main (void) {
char a[1001];
int i = 0;

printf("Please enter an integral number up to 1000: ");
fgets(a, sizeof(a), stdin);
// scanf("%1000s", a); Alternative to previous fgets.

while (a[i] != 0) {
printf("%c\n", a[i]);
i++;
}

printf("\n");

return 0;
}

关于c - 我想在 C 中制作程序打印每个数字的完整数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com