gpt4 book ai didi

c - 如果用户在未输入数据的情况下按回车键,ANSI C 将停止进程

转载 作者:行者123 更新时间:2023-12-04 12:28:55 24 4
gpt4 key购买 nike

我的代码是这样的:

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/

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