gpt4 book ai didi

c - 如何检查用户是否在c中的scanf中输入了空行

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:48 24 4
gpt4 key购买 nike

如果用户在没有输入任何浮点值的情况下按下回车键,我需要程序退出 while 循环。谢谢!

printf("Enter scores\n”);

float scores[10];
int n=0;

while (n<10){

scanf("%f", &scores[n]);
n++;
if (THE USER PRESSES ENTER WITHOUT ENTERING ANYTHING){break;}

}

最佳答案

可以使用fgets()通过换行符将一行输入读入缓冲区,然后使用sscanf()解析缓冲区的内容.为此使用 scanf() 的问题是大多数转换说明符,尤其是 %f 转换说明符,会跳过前导空格,包括换行符。因此,如果您尝试向 scanf() 提供一个空行,该函数将继续等待输入,直到您输入一个非空白字符。

下面的代码将此技术应用到您的代码中。变量 n 已更改为 size_t 类型变量,因为这是保证能够保存任何数组索引的无符号类型。此外,请注意 fgets()sscanf() 都返回应检查的值。如果出现错误,fgets() 函数将返回一个空指针,如果出现错误,下面的代码将打印一条错误消息并退出。 sscanf() 函数返回成功转换的次数,该值可用于确保输入符合预期。当用户输入空白行或没有前导浮点值的行(前导空白是可以的)时,返回零,并转义输入循环。

我添加了一些代码来显示输入到数组中的值。

#include <stdio.h>
#include <stdlib.h> // for exit()

int main(void)
{
float scores[10];
char buffer[100];
size_t n = 0;

printf("Enter scores\n");

while (n < 10){
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
fprintf(stderr, "Error in fgets()\n");
exit(EXIT_FAILURE);
}

if (sscanf(buffer, "%f", &scores[n]) == 1) {
++n;
} else {
break;
}
}

for (size_t i = 0; i < n; i++) {
printf("scores[%zu] = %f\n", i, scores[i]);
}

return 0;
}

示例交互:

Enter scores
3.8
3.6
2.9
3.4

scores[0] = 3.800000
scores[1] = 3.600000
scores[2] = 2.900000
scores[3] = 3.400000

关于c - 如何检查用户是否在c中的scanf中输入了空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42265038/

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