关于C的输入合法性检查

邹富星 发布于 2013/05/14 11:23
阅读 411
收藏 0

@中山野鬼 你好,想跟你请教个问题:

  我在linux写一个小东西,在做输入检查的时候,会出现问题,为了方便解决问题,将检查部分的代码单独拉出来做测试,但总是有问题,代码如下:

#include <stdio.h>

int main(void)
{
  int a = 0;
  int result = 0;
  while(1)
  {
    printf("请输入一个数值 :");
    result=scanf("%d",&a);
    int b = a;
    fflush(stdin);
    if(result != 1)
    {
      printf("输入有误,请重新输入!");
      continue;
    }
    printf("%d\n",result);
  }

  return 0;
}
出现的现象,当输入一个字符的时候,会导致死循环,原以为是没有清除缓存,但在每次输入之后,将得到的值赋给另外一个变量就马上清空缓存,还是不行。麻烦野鬼能帮忙看看是哪些细节的问题,谢谢了!

加载中
0
中山野鬼
中山野鬼
加\n不死人的。另外现在的教育都怎么会事,从屏幕读和从文件读没区别,为什么这么热衷于自己敲键盘给输入。。。哈,以后再从屏幕读数据的程序,我就不帮忙看了。
0
邹富星
邹富星

呵呵,我不清楚这个和教育部有什么关系啊?我要从键盘输入,是因为有需要交互的地方,我是给出一个菜单,通过键盘输入来选择,读文件的话不能实现。

另外,我加'\n'不死人的,不明白什么意思?

Railgun
Railgun
scanf("%d\n", &a) //这样吧
0
Dr.Who
Dr.Who

引用来自“邹富星”的答案

呵呵,我不清楚这个和教育部有什么关系啊?我要从键盘输入,是因为有需要交互的地方,我是给出一个菜单,通过键盘输入来选择,读文件的话不能实现。

另外,我加'\n'不死人的,不明白什么意思?

linux下面全是文件,你以为那个stdin是什么?另外作合法性检查先用fgets读进来再分析字符串,scanf本身就会死人的。
0
邹富星
邹富星
呵呵,谢谢 sam_sun   Dr.Who  两位,今天问了问题,后来忙了,没看到回复,多谢你们的热心回答。野鬼,我是菜鸟,别见怪!
0
中山野鬼
中山野鬼

引用来自“Dr.Who”的答案

引用来自“邹富星”的答案

呵呵,我不清楚这个和教育部有什么关系啊?我要从键盘输入,是因为有需要交互的地方,我是给出一个菜单,通过键盘输入来选择,读文件的话不能实现。

另外,我加'\n'不死人的,不明白什么意思?

linux下面全是文件,你以为那个stdin是什么?另外作合法性检查先用fgets读进来再分析字符串,scanf本身就会死人的。
嘿嘿,这个知道我在说什么。哈。
返回顶部
顶部