c语言 检查输入是不是合法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 检查输入是不是合法相关的知识,希望对你有一定的参考价值。

c语言的输入存在着风险。比如:我想让用户输入一个整数,可用户却输入了一个字符。就算程序再大面临错误的输入也要崩溃。我现在要做的是:检查用户的输入是否合法(按要求输入),“我想让用户输入一个整数,可用户却输入了一个字符。”提示用户输入错误,并且让用户重新输入(多次输入错误,就一直输到正确为止)。这样一个程序要怎么写?有思路也可以。(没财富了,虽然有些少,但还是希望你能够帮忙!谢谢!)

int input(char s[31],data *p) //输入函数,用于使用户按要求输入账务信息

char c;
printf("请输入%s时间:\n年份:",s);
scanf("%d",&p->year);
while ((c = getchar()) != '\n' && c != EOF ) ;/*清空缓冲区*/
for(;;) //循环判断用户输入数据,直至符合要求

if(p->year<0) //年份不能为负数啊,额,我是说公元前的人应该用不到这个程序

printf("%s年份输入错误,请重新输入:\n年份:",s);
scanf("%d",&p->year);
while ( (c = getchar()) != '\n' && c != EOF ) ;/*清空缓冲区,这是必须的,当然有其它多种清除缓冲区的办法,百度一下*/

else break;


printf("请输入%s金额:\n金额:",s);
scanf("%lf",&p->amount);
while ( (c = getchar()) != '\n' && c != EOF ) ; /*清空缓冲区*/
for(;;)

if(p->amount<0)

printf("%s金额输入错误,请重新输入:\n金额:",s);
scanf("%lf",&p->amount);
while ( (c = getchar()) != '\n' && c != EOF ) ;/*清空缓冲区*/

else break;


printf("请输入%s备注:\n备注:",s);
gets(p->note);
return 0;
参考技术A #include<stdio.h>
int ok(char buf[])//判断一个串是不是整数串

int i;
for(i=0;buf[i];i++)

if(buf[i]<'0'||buf[i]>'9')return 0;

return i>0;

int main()

char buf[100];
puts("输入一个整数");
while(1)

scanf("%s",buf);
if(!ok(buf))

puts("不是整数,请继续输入");

else break;

return 0;
本回答被提问者采纳
参考技术B 1、通过scanf函数的返回值来验证输入的合法性。
2、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
  ① 遇空格、“回车”、“跳格”键。
  ② 遇宽度结束。
  ③ 遇非法输入。
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
3、例如:
scanf("%d %d",&a,&b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型.

以上是关于c语言 检查输入是不是合法的主要内容,如果未能解决你的问题,请参考以下文章

怎样检查C语言输入数据的合法性?

C语言 问题 C: IP地址的合法性检查?

关于c语言判断电话号码合法问题

c语言输入身份证输出生日,性别,并判断身份证是不是合法

急!高分悬赏!求c语言高手!!!二叉树输入中如何判断输入是不是合法?

用C语言编写一个程序,验证输入的身份证是不是合法