我的代码是这样的:
double p, r = 12.40;
while (r > 0) {
printf("\nEnter a amount $: ");
scanf("%lf", &p);
if(p == NULL) { break; }
r -= (p / 100);
}
break
部分不起作用。如果用户在没有输入任何数量的情况下点击回车,我想退出 while
循环。
最佳答案
如果您希望循环在用户按下 enter 时退出,scanf()
可能不会将控制权返回给您的循环,直到用户输入一个值(这称为阻塞)。
可以先使用fgets()
,然后将输入传给scanf()
的亲戚sscanf()
得到那个 %lf double 值。
正如@EdHeal 指出的那样,scanf() 有一个您需要检查的返回值。它会返回它成功转换了多少东西,或者一个特殊的值,EOF,意思是没有更多的数据可以读取了。 sscanf()
的返回值会让您知道用户是否输入了值。
所以,把它们放在一起:
int main ()
{
double p, r = 1240;
char line[120];
while (r > 0) {
printf("\nEnter a amount $: ");
fgets(line, 120, stdin);
int scanned = sscanf(line, "%lf", &p);
if(scanned==0 || scanned==EOF) break;
r -= (p *100);
}
return 0;
}
有关 fgets()
的更多信息以及每个参数是什么,请查看其 man page .
关于c - 如果用户在未输入数据的情况下按回车键,ANSI C 将停止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873721/