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

C 从数组中输入几个数字,每个数字检查是否为整数,c,arrays,integer,C,Arrays,Integer,各位!! 我希望有人能帮我用C语言解决一些问题。 这是我第一次认真地做家庭作业,我没有经验,而且我正在学习电子学习,所以老师的帮助不是很有效 我需要用C语言开发控制台应用程序。用户需要输入10个整数,如果插入的数字不是整数,则需要输出错误并再次重新输入新数字,直到所有10个整数都被插入 如果我说这10个数字不能是0(我这样做是为了确保我的if-else语句可以工作),但如果我想检查每个输入数字是否为整数,那么这一切都不会起作用 我怎样才能把它做好 请帮忙 到目前为止,我的代码如下所示: #inc

各位!! 我希望有人能帮我用C语言解决一些问题。 这是我第一次认真地做家庭作业,我没有经验,而且我正在学习电子学习,所以老师的帮助不是很有效

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

如果我说这10个数字不能是0(我这样做是为了确保我的if-else语句可以工作),但如果我想检查每个输入数字是否为整数,那么这一切都不会起作用

我怎样才能把它做好

请帮忙

到目前为止,我的代码如下所示:

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

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]);
        }

    }

}
#包括
#包括
int main()
{
int i;
浮动f;
整数[10];
对于(i=0;i<10;i++)
{
scanf(“%d”和编号[i]);
如果(数字[i]!=0)
{
scanf(“*%d”和编号[i]);
}
其他的
{
printf(“\n错误!输入的数字不是整数\n”);
printf(“\n请再次插入编号\n”);
scanf(“%*d”和编号[i]);
}
}
}

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

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

  • 以浮点形式读取数字,如果数字超出整数值范围或具有非整数值,则拒绝

  • 逐字读取输入字符并建立一个整数值。如果出现无效字符,请拒绝该值


  • scanf
    返回成功匹配和分配的输入项目数。对于
    scanf
    的每次调用,可以检查
    1
    的此值。如果值为
    0
    ,则应放弃输入以清除
    stdin
    缓冲区,然后再次读取输入

    #include <stdio.h>
    #include <ctype.h>
    
    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 i=0;
    int-val;
    char ch;
    整数[10];
    而(i<10){
    //读取整数和第一个非数字字符
    val=scanf(“%d%c”,数字+i和ch);
    //如果scanf分配的项目数不是2,或者
    //第一个非数字字符不是空白,然后
    //放弃输入并再次调用读取输入。
    //例如,32ws类型的输入被完全丢弃
    如果(val!=2 | |!isspace(ch)){
    while((ch=getchar())!='\n')//放弃无效输入
    ;//null语句
    printf(“错误!输入的数字不是整数。\n”);
    printf(“请再次输入整数。\n”);
    继续;
    }
    ++一,;
    }
    //处理数字数组
    返回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 main(无效)
    {
    int i;
    整数[10];
    整数和=0;
    
    对于(i=0;i读取
    int
    ,建议
    fgets()
    然后
    sscanf()
    strtol()

    建议创建一个可重复使用的
    int GetInt(const char*prompt)
    函数。

    用户输入是有害的。在经过充分审查之前不要相信它。

    请看《谢谢你这么快的回复》。你能给我写一个例子,说明它在每个选项的代码中的外观吗?今天我已经在尝试sscanf的东西了,但有一些东西是错误的。谢谢。这是可行的,但有没有办法让程序中的数字消失,因为不是我nteger不会在数组中计数。例如-用户输入1 2 3 0,5(错误)4(而不是0,5)5 6 7 8 9 10=总输入数(整数)是10,因为在您的代码中,他不允许输入最后一个数字,因为他计算的数字不是整数。@effeja那么您最好将整数作为字符串读取,然后检查字符串是否包含任何非数字字符。@effeja请输入更新后的答案。现在它做了您想要的。第二个
    val=scanf(“%d”)似乎是,数字+i);
    应删除。
    val = scanf("%d", numbers + i);
    
    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;
    }
    
    #include <stdio.h>
    #include <stdlib.h>
    
    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;
    }
    
        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;