如何在循环中使用scanf读取数据,直到下线?

如何在循环中使用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) {

我的问题如下:

我需要使用标准库在C中创建一个函数。 此函数应从标准输入读取数据,如下所示:值1值2值3

其类型为uint32\u t

问题是,我不喜欢输入那么多的数据,当用户输入不符合给定格式的行时,或者输入带空格的行时,或者输入EOF时,我可以完成数据的读取

我在页面上阅读了几个类似问题的答案,下面是我所做的代码:

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");
}

谢谢你的回答,我不得不修改一下以得到我真正想要的,但是你的想法很好。