0

我遇到的问题如下:

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

谁的类型是 uint32_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;
}

但不能正常工作。

有什么建议么?

4

1 回答 1

2

建议:

  • 使用读取该行fgets()
  • 读取由fgets()with填充的行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");
}
于 2013-05-22T15:46:32.270 回答