C语言重新输入
求教C语言内如何在输入字符错误的情况下,程序要求重新入,感觉这个程序达不到这个效果,能改下吗?谢谢啦
#include<stdio.h>
void main()
{
char grade; //从键盘输入大写字母,程序输出对应段分数
scanf("%c",&grade);
while(grade>='A'&&grade<='Z'==1)
{
printf("输入有误,请重新输入!");
scanf("%c",&grade);
}
printf("Your score:");
switch(grade)
{
case'A':
{
printf("85~100\n");
break;
}
case'B':
{
printf("70~84\n");
break;
}
case'C':
{
printf("60~69");
break;
}
case'D':
{
printf("<60\n");
break;
}
default:
{
printf("enter data error!\n");
}
}
} 本帖最后由 巴巴鲁 于 2020-9-15 22:42 编辑
像这种重新输入,一般都需要用到do-while循环
#include<stdio.h>
void main()
{
char grade; //从键盘输入大写字母,程序输出对应段分数
int flag = 0;
do
{
scanf("%c",&grade);
getchar(); // 缓冲输入的回车
if(grade >= 'A' && grade <= 'Z')
{
flag = 0; // 当输入为A~Z,退出循环
}
else
{
flag = 1;// 输入不为A~Z
printf("输入错误,请重新输入!\n");
}
}while(flag == 1);
printf("Your score:");
switch(grade)
{
case'A':
{
printf("85~100\n");
break;
}
case'B':
{
printf("70~84\n");
break;
}
case'C':
{
printf("60~69");
break;
}
case'D':
{
printf("<60\n");
break;
}
default:
{
printf("enter data error!\n");
}
}
} 本帖最后由 jackz007 于 2020-9-15 23:46 编辑
#include<stdio.h>
main(void)
{
char grade ;
for(;;) {
printf("请输入分数等级(A~D):") ;
scanf("%c" , & grade) ;
fflush(stdin) ; // 关键语句,清除键盘缓冲区。楼主可以注释掉此句,
// 观察在输入错误时候的效果。
if(grade >= 'a' && grade <= 'z') grade -= 0x20 ; // 把小写字符转换为大写
if(grade >= 'A' && grade <= 'D') break ; // 如果输入有效,退出循环
else printf("输入有误,请重新输入!\n\n") ; // 否则给出错误提示,继续循环
}
switch(grade) {
case 'A': printf("85~100\n") ; break ;
case 'B': printf("70~84\n"); break ;
case 'C': printf("60~69\n"); break ;
case 'D': printf("< 60\n") ; break ;
}
} #include<stdio.h>
int main()
{
char grade; //从键盘输入大写字母,程序输出对应段分数
scanf("%c", &grade);
while (grade < 'A' || grade > 'Z' )
{
printf("输入有误,请重新输入!");
scanf("%c", &grade);
}
printf("Your score:");
switch (grade)
{
case'A':
{
printf("85~100\n");
break;
}
case'B':
{
printf("70~84\n");
break;
}
case'C':
{
printf("60~69");
break;
}
case'D':
{
printf("<60\n");
break;
}
default:
{
printf("enter data error!\n");
}
}
return 0;
} 本帖最后由 baige 于 2020-9-16 12:36 编辑
改成这一句就可以了grade < 'A' || grade > 'Z'
或者!(grade>='A'&&grade<='Z') baige 发表于 2020-9-16 06:58
第6行的 scanf("%c", &grade); 语句可以去掉,不影响程序运行 jackz007 发表于 2020-9-15 23:22
你的这个程序,大小写是不分的,小写的 a、b、c、d 照样输出对应的成绩 不好意思,今天的回帖数没法完成,打扰到大家了 本帖最后由 baige 于 2020-9-16 15:30 编辑
呵呵 风过无痕1989 发表于 2020-9-16 14:49
第6行的 scanf("%c", &grade); 语句可以去掉,不影响程序运行
让一个未初始化的变量去运算,真的很强 baige 发表于 2020-9-16 15:27
让一个未初始化的变量去运算,真的很强
我用VC++6.0 与 DEV-C++ 两个运行都是正常的
页:
[1]