gpt4 book ai didi

c - 如何读取 C 中以空格分隔的 0-9 数字?

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

我正在尝试制作一个程序,该程序在 C 中读取以空格分隔的正数,并向任何其他格式的输入提供错误消息。

例如,以下输入是正确的:

0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
7 6 5 4 3
1 2 3
...

对于所有其他输入,程序应该终止并打印一条错误消息。例如:

0 1,2 3 4-5 67 89
0123456789
0a2b3c4d5e6f7g8h9i
...

这是我的尝试:

...
int inputArr[999];
int length = 0;
char c = getchar();

while ( c != '\n' ) {
if ( isdigit(c) ) {
inputArr[length] = c - '0';
length++;
} else {
printf ("Wrong Input Format!\n");
}
c = getchar();
if ( c != ' ' ) {
printf ("Wrong Input Format!\n");
} else {
continue;
}
}
...

但是即使输入正确,这也会给出错误消息。

更新:

当我输入以下内容时:

0 1 2 3 4 5 6 7 8 9

我希望程序不会给我任何错误消息,但我收到了 10 条错误消息(在删除行 exit(1); 之后)。我假设它是 1 and 之后的每个字符的一条错误消息(即 9 条消息)和末尾 '\n' 字符的 1 条消息。

最佳答案

试试这个:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

void e() { puts("Bad input."); exit(EXIT_FAILURE); }

int main(void)
{
for (int c1 = 0, c2 = 0; c1 != EOF && c2 != EOF; )
{
c1 = getchar();
if (c1 == EOF || c1 == '\n') continue; // file or line ends in "x "
if (!isdigit(c1)) e();

c2 = getchar();
if (c2 != EOF && c2 != '\n' && c2 != ' ') e();

printf("Got input: '%c'.\n", c1);
}
}

此版本允许在行尾使用尾随空格。如果您不想允许尾随空格(即 "1 2" 可以,但 "1 2 " 是错误的),请更改第一个条件:

if (c1 == EOF || c1 == '\n' || !isdigit(c1)) e();

关于c - 如何读取 C 中以空格分隔的 0-9 数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267129/

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