我想让我的程序再次询问用户是输入字母还是按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);
但是程序将立即开始打印“请输入一个整数,然后按Enter:”而不会停止。有办法吗?
编辑:忘记了&edit2:谢谢大家。
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
的范围,则该行为是不确定的。因此,更好的方法是使用fgets
和strtol
库函数。