当前位置: 代码迷 >> C语言 >> 要急出人命了。不执行问题
  详细解决方案

要急出人命了。不执行问题

热度:119   发布时间:2007-08-22 11:16:49.0
要急出人命了。不执行问题

高人来看下********和////////////那部分的代码怎么不执行。
这段程序是为了试验写的.本来想写个学生信息管理系统的,但写到这地方就写不下去了,所以摘出来做下试验。
编译器DEV-C++


#include "stdio.h"
#include "conio.h"
main()
{
char c,_c;
while(1)
{
scanf("%c",&_c);
printf("*************\n");
c=getchar();
if(c=='y'||c=='Y')
continue;
if(c=='n'||c=='N')
break;
printf("////////////\n");
}
printf("great!");
getch();
}
搜索更多相关的解决方案: 出人命  

----------------解决方案--------------------------------------------------------

把getchar();换成scanf("%c",&c);c=getc(stdin);都一样。或直接用getchar(),后面的改为if(getchar()=='c'...,结果是要输入2次n才能跳出,输入y后要4次回车才能继续。郁闷死了


----------------解决方案--------------------------------------------------------
getchar();这个函数是从缓冲区读取数据。你在前面 scanf("%c",&_c); 这个语句 输入一个字符后按的回车会留在键盘缓冲区里。所以在执行 c=getchar(); 这个语句时获得的c是 回车 ,所以执行 printf("////////////\n");语句。


----------------解决方案--------------------------------------------------------
大彻大悟!谢谢楼上的。
----------------解决方案--------------------------------------------------------
还有,那为什么把getchar();换成scanf("%c",&c);c=getc(stdin);也不行呢
----------------解决方案--------------------------------------------------------
以下是引用学技术的在2007-8-22 11:35:53的发言:
还有,那为什么把getchar();换成scanf("%c",&c);c=getc(stdin);也不行呢

我不太清楚getc();函数的用法,只记得它衍生出的fgetc();是向指定文件读入字符的。

我不知道你在程序中变量_c,是干什么的。反正觉得把
scanf("%c",&_c);
printf("*************\n");
放在循环里太乱, 我改成这样你看可否:

#include "stdio.h"
#include "conio.h"
main()
{
char c,_c;
scanf("%c",&_c);
printf("*************\n");
while(1)
{
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
continue;
if(c=='n'||c=='N')
break;
printf("////////////\n");
}
printf("great!");
getch();
}


----------------解决方案--------------------------------------------------------
scanf("%c",&_c);
printf("*************\n");
c=getchar();

值得考虑!

----------------解决方案--------------------------------------------------------
以下是引用nwpu063417在2007-8-22 12:15:42的发言:

我不太清楚getc();函数的用法,只记得它衍生出的fgetc();是向指定文件读入字符的。

我不知道你在程序中变量_c,是干什么的。反正觉得把
scanf("%c",&_c);
printf("*************\n");
放在循环里太乱, 我改成这样你看可否:

#include "stdio.h"
#include "conio.h"
main()
{
char c,_c;
scanf("%c",&_c);
printf("*************\n");
while(1)
{
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
continue;
if(c=='n'||c=='N')
break;
printf("////////////\n");
}
printf("great!");
getch();
}

谢谢楼上提醒,你的意思是用第一个getchar();来存放输入完_c后按下的回车对吧?如果是这样的我就想通了。这个问题困扰了我好几天了。我本来是要写个学生通迅录的,段代码是在添加函数里摘出来做了点变动来实验的。


----------------解决方案--------------------------------------------------------
以下是引用学技术的在2007-8-23 8:27:52的发言:

谢谢楼上提醒,你的意思是用第一个getchar();来存放输入完_c后按下的回车对吧?如果是这样的我就想通了。这个问题困扰了我好几天了。我本来是要写个学生通迅录的,段代码是在添加函数里摘出来做了点变动来实验的。

是这个意思。
学习C语言首先要把基础打好,自己不清楚的地方一定要看书。有兴趣的话,做点自己喜欢的小程序也是蛮不错的。
----------------解决方案--------------------------------------------------------

  相关解决方案