我的代码是这样的:
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()
的relative中,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()
以及每个参数的含义,请查看其手册页。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句