我一直在尝试制作这个简单的程序,基本上是一个小小的对话。我遇到的最大问题是,每当我想要询问年龄时,如果有人错误地回答了一些不是数字,而是一个短语或一个单词的东西,而不是它不可能只是假设一个值。我可以写什么,以便如果有人对不是数字的东西进行了权利,它只会重复循环?
main (){
printf("Can you tell me your age\n");
scanf("%d",&age );
do{
if ( age < 16) {
printf("You're a child!\n");
}
else if ( age == 17){
printf("Me too, cool! Let's meet.\n");
}
else {
printf("Pretty old! You are dying.\n");
}
} while ((age<=0) && (age>130));
}
答案 0 :(得分:0)
要检查字符是否代表数字,您可以使用标准函数isdigit()
。
但在scanf()
的情况下,您只需检查其返回值即可。
你可能想要&#34;清理stdin&#34;如果你不知道用户会输入什么。
void clean_stdin(void)
{
int c = 0;
while (c != '\n' && c != EOF)
c = getchar();
}
int main(void)
{
int age;
int scanf_ret;
do
{
printf("Can you tell me your age\n");
scanf_ret = scanf("%d", &age);
clean_stdin();
} while (scanf_ret != 1);
/*
Now we know that age contains a valid number
*/
return (0);
}
答案 1 :(得分:0)
成功时,scanf()返回成功填充的参数列表的项目数。我们只有一个参数,所以我们可以在while
循环中使用这个返回值来连续检查它1
(一个有效的输入):
#include <stdio.h>
int main() {
int age, temp, status;
printf("Can you tell me your age\n");
status = scanf("%d", &age);
while(status!=1) {
while( (temp=getchar()) != EOF && temp != '\n' ) {};
printf("Invalid input... please enter a number: ");
status = scanf("%d", &age);
}
if ( age < 16) {
printf("You're a child!\n");
}
else if ( age == 17) {
printf("Me too, cool! Let's meet.\n");
}
else {
printf("Pretty old! You are dying.\n");
}
}
希望这有帮助。
答案 2 :(得分:-1)
您需要检查if语句中返回的scanf
,您可以像这样修改代码:
int main()
{
int age;
printf("Can you tell me your age\n");
scan:
if((scanf("%d",&age ))==1)
{
do{
if ( age < 16) {
printf("You're a child!\n");
}
else if ( age == 17){
printf("Me too, cool! Let's meet.\n");
}
else {
printf("Pretty old! You are dying.\n");
}
} while ((age<=0) && (age>130));
}
else
{
printf("Please enter a number\n");
fflush(stdin);
goto scan;
}
return 0;
}