C语言初学者 编程序 遇到的问题。。。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a,b,n;
srand((unsigned)time(NULL));
b=rand()%100+1;
printf("请输入一个你猜的数(一到一百以内):\n");
do
{
do
{scanf("%d",&a);
if(!(a>=1&&a<=100))
printf("输入错误,请重新输入\n");
}while(!(a>=1&&a<=100));
if(a>b)
printf("too big!\n");
if(a==b)
{
n=1;
printf("bingo!\n");break;
}
if(a<b)
printf("too small\n");
}while(n!=1);
return 0;
}

这个程序没有问题。。

但是 为什么 输入一个 字母或者其他字符,就成了一个死循环,不停的显示” 输入错误,请重新输入“;

这是为什么呢?
还有我把 %d 换成%c,并且把1和100用单引号 引起来,结果

这是为什么呢!~~??

scanf的问题,当然,这个问题错不在你,而是你想不到的输入流的问题。当你输入一个数时,回车也进入了输入流。显然,scanf是不会读取回车的。所以当你输入错误时,scanf会反复读这个错误造成死循环。

解决方法,在scanf前面清空输入流,可以有两种选择,1是scanf前面加一句fflush(stdin);2是scanf前面加上char c;while((c=getchar)!='\n');就可以了追问

你好谢谢你的回答。。 但是 你说的两种方法我试了怎么都不可行。。  这是截图  麻烦你看看。



第一种:


第二种:


(第二种运行的时候 按什么键都没有反应)。。。

追答

抱歉,我早上没想太多。所以给你提了一个错误的建议。
纠正一下你再试试:
一、把两种方法的语句放在scanf语句的后面。
二、你截图里if(a>='1'&&a<='100')把引号去掉。下面的while也是.

追问

大哥~还是不行啊。。。。 你可以帮帮我么? 你编译好了 再发我~

追答

我在windows7 64位系统中,gcc编译无误。用的是你顶楼的代码,在scanf后面加上fflush(stdin);我在回复里放不了图。请告诉我不行是什么原因。或者把代码和截图发我邮箱z_marvin@163.com我看一下吧。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-19
函数出错,还有你的限制条件也错了,你使用了空地址的指针!追问

求详解

第2个回答  2012-11-21
把内部的do改为while循环

经验分享:C语言初学者常见的 10个错误!
变量命名的错误也是初学者常犯的问题。在C语言中,变量命名不能以数字开头,不能包含运算符,也不能与系统保留字重名。正确的命名规则有助于提高代码的可读性和可维护性。初学者通常采用简单命名,而专业程序员则更倾向于使用具有特定意义的英文单词,并遵循驼峰命名法、匈牙利命名法、帕斯卡命名法或下划线...

求c语言一些常见问题,
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现...

C语言编程最常见的15个错误
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句...

C语言编程中的问题
2、C语言初学者易犯语法错误:使用未定义的变量、标示符(变量、常量、数组、函数等)不区分大小写、漏掉“;”、“{”与“}”、“(”与“)”不匹、控制语句(选择、分支、循环)的格式不正确、调用库函数却没有包含相应的头文件、调用未C声明的自定义函数、调用函数时实参与形参不匹配、数组的边界超界等。 3、修...

C语言编程问题,初学者,麻烦简单点,可以看懂的,谢谢(*°∀°)=3?_百...
一、a为0,bx+c=0,求得一解。二、a不为0,按照一元二次方程公式:当判别式b^2-4ac,>0则两个解,=0则一个解,<0则无解。最后,代入公式求解。函数参数:a,b,c及存放结果的数组x。返回解的个数。下面是代码:include <stdio.h> include <math.h> int fun(double a,double b,...

c语言初学者,按照书上第一个列子编程,怎么一下子,出现这么多错误。求...
程序的几个基本部分,首先就是头文件,第二主函数。再就是你自己编定的功能函数了。三部分少一个程序就不完整。下面说下各部分的作用。头文件:因为所有程序都使用一些固定功能,比如在屏幕上显示,比键盘读入数据等。而实现这些功能代码就有几百行,还有一般学生不懂的汇编语言在里面。为了方便,就将...

C语言常用错误代码释义大全,让你编译运行报错不是烦恼
编程初学者在探索C语言的奇妙世界时,常常会遇到各种编译错误,但别担心,这些代码提示正是一把解开神秘迷宫的钥匙。让我们一起解读这些常见的编译错误,让你的代码编译之路更加顺畅。1. 灾难性的开始:致命错误C1003与C1004<\/ 当编译器抛出C1003时,意味着错误太多,暂停编译。先确保之前的问题已修复,...

C语言程序问题,本人是初学者中的初学者,有个程序请明士解疑。
一.int min 就是普通函数 可以有无数个普通函数 主函数中不调用就不会执行 二.return是返回值的意思 他返回t这个值 赋给m 不加这个的话m就没有值 或者说不回被改变 不能没有 没有他的话min这个函数就没有意义了 三.这个是实参和形参的道理 具体你看一下你的学习资料 这个没有什么...

初学C语言 定义新函数 遇到了问题...输出最大的数
首先回答你的第三个问题:可怜的娃娃,你的函数声明和函数定义里面不完全配对啊。仔细看看,你是int max(int a,int b,int c);下边函数定义的时候呢?你写的是int max(int x,int y,int z){...},这样子编译器会发现你的声明和定义不符,所以报错。这里要记得,声明和函数定义的东西必须是完全...

C语言编程序新手问题
你的scanf("%d%d",&x,&y); 这一句改为scanf("%d %d",&x,&y);就好了!输入的时候两个数之间要用空格隔开!运行结果看我的截图!

相似回答