从数组中输入几个数字,每个数字检查是否为整数

大家! 我希望有人可以帮助我找出C语言的东西。 这是我在IT方面的第一次认真的功课,我没有经验,而且我在电子学习中学习,所以老师的帮助不是很好。

我需要用C语言开发控制台应用程序。 用户需要输入10个整数,如果插入号不是整数,则需要输出错误并再次输入新的数字,直到插入所有10个整数。

如果我说这10个数字不能为0(我确保我的if-else语句正常工作),但是当我想要检查每个输入数字是否会检查时,一切都有效整数与否。

我怎么能做对

请帮忙

到目前为止我的代码看起来像这样:

#include  #include  int main() { int i; float f; int numbers[10]; for (i = 0; i < 10; i++) { scanf ("%d", &numbers[i]); if (numbers[i] != 0) { scanf ("*%d", &numbers[i]); } else { printf ("\nError!Entered number is't integer \n"); printf ("\nPlease insert number again \n"); scanf("%*d", &numbers[i]); } } } 

 #include  int main(void) { int i = 0; int val; char ch; int numbers[10]; while(i < 10) { val = scanf("%d", numbers + i); // read the integer into a[i] if(val != 1) { while((ch = getchar()) != '\n') // discard the invalid input ; // the null statement printf("Error! Entered number is not an integer.\n"); printf("Please enter an integer again.\n"); val = scanf("%d", numbers + i); continue; } ++i; } // process the numbers array return 0; } 

我再次写这一行

 val = scanf("%d", numbers + i); 

现在它的工作方式我需要。 太棒了 - 非常感谢

您可以使用以下几种技术:

  1. 将数字作为字符串读取,如果包含不适合整数的字符,则拒绝该字符。 使用sscanf()将字符串转换为整数。

  2. 将数字作为浮点数读取,如果超出整数范围或者它具有非整数值,则拒绝该数字。

  3. 按字符读取输入字符并构建整数值。 如果出现无效字符,请拒绝该值。

scanf返回成功匹配和分配的输入项的数量。 每次调用scanf都可以检查此值为1 。 如果值为0 ,则应丢弃输入以清除stdin缓冲区并再次读取输入。

 #include  #include  int main(void) { int i = 0; int val; char ch; int numbers[10]; while(i < 10) { // read an integer and the first non-numeric character val = scanf("%d%c", numbers + i, &ch); // if the number of items assigned by scanf is not 2 or if // the first non-numeric character is not a whitespace, then // discard the input and call read input again. // for example input of type 32ws are completely discarded if(val != 2 || !isspace(ch)) { while((ch = getchar()) != '\n') // discard the invalid input ; // the null statement printf("Error! Entered number is not an integer.\n"); printf("Please enter an integer again.\n"); continue; } ++i; } // process the numbers array return 0; } 

虽然我对你的问题的细节并不完全清楚,但这里有一个类似你想要的代码大纲:

 int main(void) { int i; int numbers[10]; int sum = 0; for(i=0; i<10; ++i) { printf("Enter #%d:\n", i+1); scanf("%d", numbers+i); if (numbers[i] % 2 == 0) // Then Number is even { sum += numbers[i]; } } printf("The sum of only the even numbers is %d\n", sum); getch(); return 0; } 

要读取int ,建议fgets()然后sscanf()strtol()

 #include  #include  int main(void) { int i; int numbers[10]; for (i = 0; i < 10; ) { char buffer[50]; if (fgets(buffer, sizeof buffer, stdin) == NULL) break; int n; // number of `char` parsed if (sscanf(buffer, "%d %n", &numbers[i], &n) != 1 || buffer[n] != '\0') { printf("Error! Entered number is not an integer.\n"); printf("Please enter an integer again.\n"); continue; } i++; } return 0; } 

strtol()方法。 这会检测溢出问题:

  if (fgets(buffer, sizeof buffer, stdin) == NULL) break; char *endptr; errno = 0; long num = strtol(buffer, &endptr, 10); if (errno || num < INT_MIN || num > INT_MAX) Handle_RangeError(); if (buffer == endptr || *endptr != '\n') Handle_SyntaxError(); numbers[i] = (int) num; 

建议制作一个可以重复使用的int GetInt(const char *prompt)函数。
用户输入是邪恶的。 在经过严格审查之前不要相信它。