C:提示输入一行并检查

标签 c loops printf scanf user-input

问题陈述:
循环5次。每次,询问用户一个整数,检查收到的输入是否是该类型,然后询问另一个输入,直到用户给出五个正确的输入。该程序的输出应如下所示,假设用户提供了五个 int 类型的正确输入:

你好!请给我一个整数:0
谢谢!请再给我一个整数:1
谢谢!请再给我一个整数:1
谢谢!请再给我一个整数:2
谢谢!请再给我一个整数:3
谢谢!我对五个整数感到满意。

我的尝试:

#include <stdio.h>

int invalid(x)  
{  
    printf("\nThat was not an integer, please give me an integer: ");  
    scanf("%d", &x);
}

int main()
{
    int a, b, c, d, e, x;

    printf("Hello! Please give me an integer: ");
    scanf("%d", &a);
            if(scanf("%d", &a) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &b);
            if(scanf("%d", &b) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &c);
            if(scanf("%d", &c) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &d);
            if(scanf("%d", &d) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! Please give me another integer: ");
    scanf("%d", &e);
            if(scanf("%d", &e) != 1)
            {
                    invalid(x);
            }
    printf("\nThanks! I am happy with five integers.\n");
    return 0;
}


// Failed attempt to use a loop //
for(i = 0; i < 4; i++)
{
     printf("Thanks! Please give me another integer: ");
     scanf("%d", &y);
              if(scanf("%d", &y) != 1)
              {
                     invalid(y);
              }
 }







do
{
     printf ("Thanks! Please give me another integer: ", );
     scanf("%d", &x);
         for(scanf("%d", &x) != 1)
         {
              printf("That was not an integer, please give me an integer: ")
              scanf("%d", &x);
         }
         i++;
} while (i < 4);

我从第一个输入得到的常见输出是字母或非整数:

Hello! Please give me an integer: d  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! Please give me another integer:  
That was not an integer, please give me an integer: Thanks! I am happy with five integers.

最佳答案

  1. 您必须使用数组来存储 5 个数字(或 4 个数字,或任何其他大于 1 的数字)
  2. 无论如何,您都应该使用循环来询问 5(或任何其他数字系列),这里 for 循环会很好
  3. 你应该分析scanf返回的值来检查输入是否正确,并重新询问值是否错误(这也可以是循环,但是do..while 是 prehereble)在从输入缓冲区中删除不正确的字符后。

更新

我的程序版本:

#include <stdio.h>

#define NUM_CNT 5

int main(void)
{
    int i, res, c;
    int num[NUM_CNT]; // array for all your numbers
    printf("Hello!\n");
    for (i = 0; i < NUM_CNT; i++) {
        printf("Please give me an integer: ");
        do {
            res = scanf("%d", &num[i]);
            if ( res ) {
                printf("Thanks!\n");
            } else {
                printf("That was not an integer, please give me an integer: ");
                while ((c = getchar()) != '\n' && c != EOF); // clean input buffer
            }
        } while(res != 1);
    }
    printf("I am happy with five integers.\n");
    // just to see all the numbers
    for (i = 0; i < NUM_CNT; i++) {
        printf("%d ", num[i]);
    }
    return 0;
}

您可以使用我的想法自由地重新编写您的代码。

关于C:提示输入一行并检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53424663/

相关文章:

python - 我想创建新的数据框列循环遍历特定列的行

c - typedef 内存分配

c - 单位轴上 C 中 double 的有效环绕

c - 递增和递减文件指针

使用宏连接变量

matlab - 转置矩阵的每一行并将结果向量乘以其他矩阵的更快方法?

javascript - 为什么功能会按顺序运行,即使它们是在循环内异步调用的?

c - 如何将一个字节打印为两位十六进制字符?

c - 末尾显示随机字符的数组

C++ 可变参数和 vsprintf