问题陈述:
循环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.
最佳答案
- 您必须使用数组来存储 5 个数字(或 4 个数字,或任何其他大于 1 的数字)
- 无论如何,您都应该使用循环来询问 5(或任何其他数字系列),这里
for
循环会很好 - 你应该分析
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/