我的代码是这样的:
double p, r = 12.40;
while (r > 0) {
printf("\nEnter a amount $: ");
scanf("%lf", &p);
if(p == NULL) { break; }
r -= (p / 100);
}
break
部分不起作用。我想退出while
循环,如果用户点击进入而没有输入任何金额。
答案 0 :(得分:3)
p
不是指针,但NULL
等于零(通常)。所以这条线有点无意义
if(p == NULL) { break; }
scanf
的手册页 - 即http://linux.die.net/man/3/scanf。它确实返回了您需要检查的值答案 1 :(得分:3)
如果您希望在用户按Enter键时退出循环,scanf()
可能无法将控制权返回到您的循环,直到用户输入值(这称为阻止)。
您可以先使用fgets()
,然后将输入传递给scanf()
的亲戚sscanf()
,以获得%lf双倍值。
正如@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。
答案 2 :(得分:0)
当用户在此处按Enter键时,p
变量不一定会更改为NULL
。您应该尝试获取特定的数字或字符以退出循环。除了scanf
函数等待用户输入内容之外,当您按Enter键而不输入任何值时,程序不会继续。