首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一段有关scanf函数只允许输入数字的代码

2012-09-01 
请教一段有关scanf函数只允许输入数字的代码#include stdio.hint main(void){int achar chwhile (scan

请教一段有关scanf函数只允许输入数字的代码
#include <stdio.h>
int main(void)
{
  int a;
  char ch;

  while (scanf("%d", &a) != 1) 
  {
printf("Input errror,try again:");

  for ( ; (ch = getchar())!='\n' && ch != EOF; )
{
continue;
}
   
  }

  printf("%d\n", a);
  return 0;
}

================================================================================================
以上代码的功能是直到输入为数字为止才停止输入。刚学C,很多不懂,请高手指教,因为最近在写一些分数录入的小程序,需要用到这个。若单纯只定义一个INT型常量,在输入非数字字符时会有问题。于是找来了这么一段代码,但是不大理解,主要是(VC6.0环境下):

1.while中的判断条件是判断scanf是否能成功赋值?
2.那么里面的for是何用的?
3.若直接在while循环体中使用continue为什么不能达到不是数字就重新输入的功能?
4.getchar函数所获得的值是从哪来的?是从没成功赋值的scanf那里传来的?

[解决办法]
外层 while循环的是直到读取了长度为1的一个整型数字,也就是说只能输入一个个位数。

里面的for循环是清空输入缓存的,只要有字符就读取,除非遇到换行和结束。
[解决办法]
#include <stdio.h>
int main(void)
{
int a;
char ch;

while (scanf("%d", &a) != 1) /*判断 scanf("%d",&a) 是否等于1,是继续循环,否则结束(你输入的是整型数字 scanf("%d",&a) 为‘真’
则是1,不是整型或其它字符为‘假’,则是0 )*/
{
printf("Input errror,try again:");

for ( ; (ch = getchar())!='\n' && ch != EOF; )
{
continue;;; /*这个continue是跳出for循环,我刚用break也试了下,效果一样的*/
}

}

printf("%d\n", a);
return 0;
}
[解决办法]
1,是的。scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。 
2,如果起初检索用户输入的“东西”,如果不是换行符(回车)和eof,那么for循环接着执行,如果遇到换行符和eof,则for循环停止,进入while(scanf("%d", &a) != 1) 的判断,此时再次扫描用户所输入的“东西”,如果第一个字符是数字的话,则把该数字给a,while条件不满足,跳出,输出a
例如:

C/C++ code
aInput errror,try again:3e3e3er3Press any key to continue
[解决办法]
scanf()函数返回成功赋值的数据项数

scanf() 中的 %d 指明要读入 int, 如果没有满足要求的输入,则返回 0
[解决办法]
C/C++ code
int main(){    int a, n;    char ch;    while ((n = scanf("%d", &a))!= 1)      {        printf("Input error,try again:\n");        printf("n = %d\n", n);        for ( ; (ch = getchar())!='\n' && ch != EOF; )        {            continue;        }    }    printf("a = %d\n", a);    printf("n = %d\n", n);     system("pause");    return 0;} 

热点排行
Bad Request.