gpt4 book ai didi

c - 使用 scanf ("%i",var) 时,如果用户输入字母或仅按 Enter 键,我会遇到问题

转载 作者:行者123 更新时间:2023-11-30 19:00:30 26 4
gpt4 key购买 nike

我希望我的程序再次询问用户是否输入了字母或只是按下了 Enter 键。我知道如果输入不是数字 scanf() 将返回 0,所以我一直在这样做:

int  variable;
printf("Please write an integer and then press enter: \n");
if (scanf("%i",&variable)!= 1) { /* ERROR CODE */; return 1;}
return 0;

但我不希望我的程序在输入不正确时停止。所以我尝试了这个:

int variable;
do
{
printf("Please write an integer and then press enter: \n");
} while (scanf("%i",&variable) != 1);

但是程序会开始打印“Please write an integer and then press Enter:”而不会停止。有办法做到这一点吗?

编辑:忘记了&编辑2:谢谢大家。

edit3:我一直在研究这些功能。这段代码正确吗?

char variable[10]; int var;
do
{
printf("Please write an integer: ");
fgets(variable,sizeof(variable),stdint);
} while( sscanf(variable,"%i",&var) != 1 );

我已经尝试过了,它有效,但我将其发布在这里,因为我知道我可能错过了一些东西。

最佳答案

int variable;
do {
printf("Please write an integer and then press enter: \n");
} while (scanf("%i", &variable) != 1 && scanf("%*[^\n]") == 0);

第二个 scanf 丢弃直到 '\n' 字符为止的字符。 '\n' 字符仍然保留,但在下一次循环迭代中第一个 scanf 会跳过它。该代码有一些缺陷,但在大多数情况下都可以工作。一个缺陷是,如果 scanf 返回 EOF 而没有读取字符,则循环将退出,但 variable 的值将是不确定的,这可能会导致使用时会导致未定义的行为。这个病并不难治愈。另一个问题是,如果用户输入的数字超出了 int 的范围,则行为是未定义的。因此,更好的方法是使用 fgetsstrtol 库函数。

关于c - 使用 scanf ("%i",var) 时,如果用户输入字母或仅按 Enter 键,我会遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490196/

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