我有一些代码可以从输入中获取数字直到EOF并将它们放入数组中。
#include <stdio.h>
int main(){
int numbers[250000],i,m=0;
while(scanf("%d",&i)!=EOF){
numbers[m]=i;
m++;
}
}
我的问题是我需要检查输入是否有效(如果是数字)。如果它不是一个数字,我需要打印出一条消息,上面写着“#34;错误的输入&#34;并结束该计划。
有人可以帮帮我吗?
PS。我知道这个问题已被问过几次,我已经用Google搜索了,但我无法从答案中找出如何使代码适应我的情况。所以,对不起,如果问题似乎是多余的。
答案 0 :(得分:0)
scanf的返回值是一个整数,告诉您成功读取了多少项。如果成功读取了单个整数,则scanf将返回1.
#include <stdio.h>
int main(){
int numbers[250000],i,m=0;
int itemsRead = 0;
while(itemsRead = scanf("%d",&i) != EOF){
if (itemsRead != 1)
{
printf("Wrong input");
return 0;
}
numbers[m]=i;
m++;
}
}
答案 1 :(得分:0)
您需要将输入作为字符串读取,验证其上下文实际上是一个数字,然后将其分配给数组的单元格,如下所示:
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#define MAXINPUT 100
int main() {
int numbers[250000],m=0;
char input[MAXINPUT] = "";
while(scanf ("%s", input)!=EOF) {
for (size_t i = 0; i < strlen(input); i++)
if (!isdigit(input[i]))
{
printf ("Entered input is not a number\n");
exit(1);
}
// here we know that 'input' is a number
numbers[m] = atoi (input);
m++;
}
return 0;
}
PS:我会使用fgets()
代替scanf()
。
答案 2 :(得分:0)
缩短@gssamaras代码,你可以有更简单的东西,比如这个
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
int main()
{
int numbers[250000],i,m=0;
char temp;
while(scanf("%c",&temp)!=EOF)
{
if(!isdigit(temp)))
{
printf("Wrong input");
break;
}
numbers[m]=atoi(temp);
m++;
}
}