如何在循环中使用scanf读取数据,直到下线?
我的问题如下: 我需要使用标准库在C中创建一个函数。 此函数应从标准输入读取数据,如下所示:值1值2值3 其类型为uint32\u t 问题是,我不喜欢输入那么多的数据,当用户输入不符合给定格式的行时,或者输入带空格的行时,或者输入EOF时,我可以完成数据的读取 我在页面上阅读了几个类似问题的答案,下面是我所做的代码:如何在循环中使用scanf读取数据,直到下线?,c,function,scanf,space,eof,C,Function,Scanf,Space,Eof,我的问题如下: 我需要使用标准库在C中创建一个函数。 此函数应从标准输入读取数据,如下所示:值1值2值3 其类型为uint32\u t 问题是,我不喜欢输入那么多的数据,当用户输入不符合给定格式的行时,或者输入带空格的行时,或者输入EOF时,我可以完成数据的读取 我在页面上阅读了几个类似问题的答案,下面是我所做的代码: int main(void) { uint32_t value1, value2, value3; int ret = 3; char ch; while (true) {
int main(void) {
uint32_t value1, value2, value3;
int ret = 3;
char ch;
while (true) {
printf("Enter the data:\n");
ret = scanf("%u %u %u", &value1, &value2, &value3);
if ((ret != 3) || (getc(stdin) == EOF) ||
(getchar() == ' ')) {
break;
}
printf("\nYou entered: %u, %u, %u\n", value1, value2, value3);
}
printf("Finish..");
return 0;
}
但工作不正常
有什么建议吗?建议:
- 用英语读这行
- 阅读由
和fgets()
填充的行,类似于当前使用的sscanf()
scanf()
scanf()
失败,例如输入无效,则发布的代码需要丢弃该行
例如:
printf("Enter the data:\n");
char line[1024];
while (fgets(line, 1024, stdin))
{
uint32_t values[3];
if (sscanf(line, "%u %u %u", &values[0], &values[1], &values[2]))
{
printf("\nYou entered: %u, %u, %u\n", values[0], values[1], value[2]);
break;
}
fprintf(stderr, "Invalid input, retry...\n");
}
谢谢你的回答,我不得不修改一下以得到我真正想要的,但是你的想法很好。