我遇到的问题如下:
我需要使用标准库在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;
}
但工作不正常。
有什么建议吗?
答案 0 :(得分:2)
推荐:
fgets()
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");
}