C语言 ——如何判断输入的是数值以外的其它数
先请大家看看我写的代码//成绩等级判定程序.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include"stdio.h"voidmain...
先请大家看看我写的代码
// 成绩等级判定程序.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
void main()
{
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
int a;
scanf("%d",&a);/*输入个数值给A*/
for
while(a>100||a<0)
{
if(a<100||a>0)
{printf("您的输入有误!请重新输入:\n");}
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
我想请问:我的这个程序编译运行后输入超过100或小于0的数都是正常的
但是只要输入数值以外的东西就会出死循环!!
请问各位高手,如何修改我这个程序才能让我的程序“顺便”判断输入的不是数值而提示 您的输入有误!请重新输入 呢?
跪求~~在线等......谢谢! 本人QQ75773246 希望认识各位C语言高手!
请多多指教!
随不起....我没看清我就复制了
其实后来改的是这样的
void main()
{
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
int a;
scanf("%d",&a);
while(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
知道很多高手都介绍用GOTO语句.....能不能不用GOTO语句而直接改改入循环的部分!?就能实现“输入检查”的功能?
继续在线等.....谢谢 展开
// 成绩等级判定程序.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
void main()
{
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
int a;
scanf("%d",&a);/*输入个数值给A*/
for
while(a>100||a<0)
{
if(a<100||a>0)
{printf("您的输入有误!请重新输入:\n");}
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
我想请问:我的这个程序编译运行后输入超过100或小于0的数都是正常的
但是只要输入数值以外的东西就会出死循环!!
请问各位高手,如何修改我这个程序才能让我的程序“顺便”判断输入的不是数值而提示 您的输入有误!请重新输入 呢?
跪求~~在线等......谢谢! 本人QQ75773246 希望认识各位C语言高手!
请多多指教!
随不起....我没看清我就复制了
其实后来改的是这样的
void main()
{
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
int a;
scanf("%d",&a);
while(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
知道很多高手都介绍用GOTO语句.....能不能不用GOTO语句而直接改改入循环的部分!?就能实现“输入检查”的功能?
继续在线等.....谢谢 展开
7个回答
展开全部
楼主你的程序逻辑也太混乱了吧:
while(a>100||a<0)就是说a>100或a<0这个循环才执行,既然这样那么接下来的一句
if(a<100||a>0)怎么可能发生?因为a>100或a<0时while才执行嘛!还有既然switch()语句放在while(a>100||a<0)大循环内,那么a/10或者大于10或者小于0,不可能等于10、9、8、7、6,程序总是执行switch()中的default
:printf("您的成绩等级是—?—……检讨~!");
这是什么逻辑呀!
scanf()和printf()函数都有返回值且都是整型量。scanf()的返回值是scanf()函数正确接受到的对应型号数的个数。比如
int
i,a,b,c;
i=scanf("%d%d%d",&a,&b,&c);
如果输入1_@_100,则i=2;如果输入12_100_-1,则i=3;如果输入@_w_A,则i=0.
本题的一个完整的c程序如下,已在win-tc和Dev-c++下调试通过。
#include
"stdio.h"
#include
"stdlib.h"
#include
"conio.h"
main()
{
int
a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
loop:
while
(scanf("%d",&a)
==
1)
/*如果输入的是一个整型数据,那么向下执行,否则程序退出*/
{
while
(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
goto
loop;
}
switch(a/10)
{
case
10
:printf("您的成绩等级是—S—继续保持~!");break;
case
9
:printf("您的成绩等级是—A—继续加油~!");break;
case
8
:printf("您的成绩等级是—B—继续努力~!");break;
case
7
:printf("您的成绩等级是—C—赶快拼搏~!");break;
case
6
:printf("您的成绩等级是—D—别放弃咯~!");break;
default
:printf("您的成绩等级是—?—……检讨~!");
}
getch();
return;
}
}
不用goto语句的完整程序如下,已运行通过:
#include
"stdio.h"
#include
"stdlib.h"
#include
"conio.h"
main()
{
int
a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
while
(scanf("%d",&a)
==
1)
/*如果输入的是一个整型数据,那么向下执行*/
{
if
(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
continue;
}
switch(a/10)
{
case
10
:printf("您的成绩等级是—S—继续保持~!");break;
case
9
:printf("您的成绩等级是—A—继续加油~!");break;
case
8
:printf("您的成绩等级是—B—继续努力~!");break;
case
7
:printf("您的成绩等级是—C—赶快拼搏~!");break;
case
6
:printf("您的成绩等级是—D—别放弃咯~!");break;
default
:printf("您的成绩等级是—?—……检讨~!");
}
getch();
return;
}
}
while(a>100||a<0)就是说a>100或a<0这个循环才执行,既然这样那么接下来的一句
if(a<100||a>0)怎么可能发生?因为a>100或a<0时while才执行嘛!还有既然switch()语句放在while(a>100||a<0)大循环内,那么a/10或者大于10或者小于0,不可能等于10、9、8、7、6,程序总是执行switch()中的default
:printf("您的成绩等级是—?—……检讨~!");
这是什么逻辑呀!
scanf()和printf()函数都有返回值且都是整型量。scanf()的返回值是scanf()函数正确接受到的对应型号数的个数。比如
int
i,a,b,c;
i=scanf("%d%d%d",&a,&b,&c);
如果输入1_@_100,则i=2;如果输入12_100_-1,则i=3;如果输入@_w_A,则i=0.
本题的一个完整的c程序如下,已在win-tc和Dev-c++下调试通过。
#include
"stdio.h"
#include
"stdlib.h"
#include
"conio.h"
main()
{
int
a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
loop:
while
(scanf("%d",&a)
==
1)
/*如果输入的是一个整型数据,那么向下执行,否则程序退出*/
{
while
(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
goto
loop;
}
switch(a/10)
{
case
10
:printf("您的成绩等级是—S—继续保持~!");break;
case
9
:printf("您的成绩等级是—A—继续加油~!");break;
case
8
:printf("您的成绩等级是—B—继续努力~!");break;
case
7
:printf("您的成绩等级是—C—赶快拼搏~!");break;
case
6
:printf("您的成绩等级是—D—别放弃咯~!");break;
default
:printf("您的成绩等级是—?—……检讨~!");
}
getch();
return;
}
}
不用goto语句的完整程序如下,已运行通过:
#include
"stdio.h"
#include
"stdlib.h"
#include
"conio.h"
main()
{
int
a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:");
while
(scanf("%d",&a)
==
1)
/*如果输入的是一个整型数据,那么向下执行*/
{
if
(a>100||a<0)
{
printf("您的输入有误!请重新输入:\n");
continue;
}
switch(a/10)
{
case
10
:printf("您的成绩等级是—S—继续保持~!");break;
case
9
:printf("您的成绩等级是—A—继续加油~!");break;
case
8
:printf("您的成绩等级是—B—继续努力~!");break;
case
7
:printf("您的成绩等级是—C—赶快拼搏~!");break;
case
6
:printf("您的成绩等级是—D—别放弃咯~!");break;
default
:printf("您的成绩等级是—?—……检讨~!");
}
getch();
return;
}
}
展开全部
scanf 送返的数,是成功地读入的数的个数。
例如:
k = scanf("%d %f",&a,&b);
成功读入2个数, k 得 2
成功读入1个数, k 得 1
一个都没成功读入,k 得 0
你的情况
int k,a;
k = scanf("%d",&a);
k 得 1,表示成功读入a个数
k 得 0, 表示没成功读入,也就是“是数值以外的”内容。
例如:
k = scanf("%d %f",&a,&b);
成功读入2个数, k 得 2
成功读入1个数, k 得 1
一个都没成功读入,k 得 0
你的情况
int k,a;
k = scanf("%d",&a);
k 得 1,表示成功读入a个数
k 得 0, 表示没成功读入,也就是“是数值以外的”内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/* Note:Your choice is C IDE */
#include "stdio.h"
main()
{
int a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:\n");
scanf("%d",&a);/*输入个数值给A*/
while(a>100||a<0)
{
if(a<100||a>0)
{printf("您的输入有误!请重新输入:\n");}
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
#include "stdio.h"
main()
{
int a;
printf("欢迎使用成绩等级判定系统,请输入您的成绩:\n");
scanf("%d",&a);/*输入个数值给A*/
while(a>100||a<0)
{
if(a<100||a>0)
{printf("您的输入有误!请重新输入:\n");}
scanf("%d",&a);
}
switch(a/10)
{
case 10 :printf("您的成绩等级是—S—继续保持~!");break;
case 9 :printf("您的成绩等级是—A—继续加油~!");break;
case 8 :printf("您的成绩等级是—B—继续努力~!");break;
case 7 :printf("您的成绩等级是—C—赶快拼搏~!");break;
case 6 :printf("您的成绩等级是—D—别放弃咯~!");break;
default :printf("您的成绩等级是—?—……检讨~!");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.你在提示重新输入后应该跳出while
2.用char接收输入,根据ascii码来确定是否是数字
2.用char接收输入,根据ascii码来确定是否是数字
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf函数是有返回值的,若输入的类型匹配则返回1,否则返回0
如:a=scanf("%d",&n),如果你输入的不是整数,则a=0
do you known how to do...
如:a=scanf("%d",&n),如果你输入的不是整数,则a=0
do you known how to do...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询