C语言错误不知道在哪

来源:百度知道 编辑:UC知道 时间:2024/06/14 06:07:31
/* Note:Your choice is C IDE */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main()
{
int ai=0;
int b=20;
char c='n';

for(;;)
{

srand(time(NULL));
ai=rand()%b;

printf("%d\n",ai);
printf("\nNi xiang zai kan i ci ma?(y/n)");
scanf("%c",&c);

if(tolower(c)=='n')
break;
if(tolower(c)!=('y'||'n'))
printf("Cuo la");
break;

}

}
我就是想做个输出不同数字再根据你((((Y/N。如果是y/n以外的数字或者字母提示出错)))决定是否继续显示数字?
还有个问题(printf("\nNi xiang zai kan i ci ma?(y/n)");)这句会重复显示)晕了。
小弟我是笨了点,最好能告诉我为什么错,不能直接把答案给我那就太不负责了,呵呵。
感谢十分详细的回答
现在遇到个新问题改了后不管输入什么都结束程序

首先,你的程序有一处语法规则写错了
if(tolower(c)!=('y'||'n'))
不能这样表达,应该写成
if (tolower(c)!='y'&&tolower(c)!='n')

改成这样之后,还是不对
会显示两次,对吧?
因为scanf("%c",&c)这一句是读入一个字符,包括回车,空格都会读

那么我们来看程序的运行过程
首先,输出一句Ni xiang zai kan i ci ma?(y/n)
用户输入y,然后按回车
这时候,程序从输入缓冲里把y读了出来,但是此时,缓冲里面还有个回车哦!
程序读到了y,然后就继续
再输入一句Ni xiang zai kan i ci ma?(y/n)
然后此时由于输入缓冲区有东西,于是就读,读到了一个回车
发现不是y也不是n,于是会输出cuo la,然后结束

你没清空键盘缓冲区
这样看看
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main()
{
int ai=0;
int b=20;
char c='n';

for(;;)
{
fflush(stdin);
srand(time(NULL));
ai=rand()%b;

printf("%d\n",ai);
printf("\nNi xiang zai kan i ci ma?(y/n)");
scanf("%c",&c);

if(tolower(c)=='n')
break;
if(tolower(c)!='