gpt4 book ai didi

c - 为什么这个 Scanf 会导致无限循环?

转载 作者:行者123 更新时间:2023-12-02 06:19:58 25 4
gpt4 key购买 nike

所以我刚开始为我的一门课学习 C,我一直在做这个作业,但这部分让我感到困惑。我有一些代码基本上看起来像:

#include <stdio.h>
#include <string.h>

int main(void)
{
int one = 0;
int two = 0;
char oneWord[100];
char twoWord[100];

printf("Enter a two digit number: ");
scanf("%d%d", &one, &two);

strcpy(firstWord, "Test");
strcpy(secondWord, "Two");

printf("%s", firstWord);

return 0;
}

现在,撇开程序的逻辑/目的不谈,我不明白为什么 scanf 语句会导致无限循环?当我将其注释掉和最后的 printf 时,我确定这是问题的原因声明工作得很好。

我尝试将其更改为 scanf("%d,%d", %one, %two)当我在输入中添加一个逗号时,这似乎工作正常。但我只想能够将 55 这样的数字分成 2 位数字。我到底做错了什么?

最佳答案

您遇到的不是无限循环,而是 scanf 等待更多输入。

d-format-specifier 表示十进制数,因此可以是“0”、“41”或“2342345”之类的数字。

在您输入第一个数字后,希望程序继续,但是scanf 刚刚完成了第一个%d,所以scanf 正在等待您完成第二个 %d。这在您看来是一个无限循环,但实际上是 scanf 执行您命令它执行的操作。

scanf 无法猜测您想要的每个数字有多少位。但是你可以告诉它你想要的方式,用一个宽度说明符来说明每条信息由多少个字符组成:

#include <stdio.h>

int main () {
int a, b;
scanf("%2d%1d", &a, &b);
printf("%d, %d", a, b);
}

错误处理:

#include <stdio.h>

int main () {
int a, b;
if (scanf("%2d%1d", &a, &b) < 2)
fprintf(stderr, "not enough digits");
else
printf("%d, %d", a, b);
}

关于c - 为什么这个 Scanf 会导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767258/

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