c语言-一个字符输入问题,想的跟结果不一样

问题描述

一个字符输入问题,想的跟结果不一样

#include
int main()
{
int a,b;
char ch;
while((ch=getchar())!='n')
{
putchar(ch);
putchar('n');
while(getchar()=='a')
printf("dasdan");
printf("huhuhuhuhn");
}
return 0;
}

我输入ca然后回车
结果是
ca
c
dasda
huhuhuhuh

第一次循环结束.缓存区里面还有一个换行符*n*
第2次循环开始时,再判断while应该程序结束.可是程序没有结束,还能输入!!!

还有一种想法就是,每个循环里面要两个字符(用了两次getchar),第一次缓存区剩余的n,我再输入一个字符,回车.程序还是没有结束....为什么
不知道哪里想错了,请大神指导

解决方案

额,首先,getchar 函数,是不会等待用户区按下回车的,他会直接的从缓冲区里面读取一个字符,如果用户的一次输入超过一个字符,写一个调用getchar 的地方就会自动去到缓冲区里面读取先一个字符。这是前提。我们来看你的问题;你输入了ca然会急了一个回车,相当于是缓冲区里面现在又三个 c + a + 回车。执行程序,第一个while 接收c != ‘n’,然会输出c ,换行,接着第二个while(第一次) ,a == a,接着输出dasda,然后第二个while(第二次)'n' != a,所以跳出了循环,打印出了huhuhu ,现在缓冲区已经没有任何的字符了,所以会卡在那。OK.

时间: 2024-11-15 22:47:36

c语言-一个字符输入问题,想的跟结果不一样的相关文章

define-c语言一个小题目,菜鸟求解。

问题描述 c语言一个小题目,菜鸟求解. #include #define Hello(x) x/(x-1) void main() { int a=1,b=2; printf("%d n",Hello(a-b)); } 程序的输出是2,但是-1/(-2)的结果不是应该为0么?所以我不知道为什么结果为2,求解答. 解决方案 printf("%d n",Hello(a-b));// a-b/(a-b-1) = 1-2/(1-2-1) = 1 + 1 = 2 解决方案二:

c语言-C语言对字符串提取想要的内容。如下:(麻烦各位了)

问题描述 C语言对字符串提取想要的内容.如下:(麻烦各位了) s1s2s3成功怎么把每个s1,s2,s3的内容放到buf1buf2buf3数组中.如果后台没有下发s1那么只存放s2,s3的内容.怎么破?sscanf破不了.. 解决方案 http://blog.csdn.net/jjyyhema/article/details/5279915http://blog.csdn.net/b_h_l/article/details/41659327 解决方案二: 需求还不是特别明了,语法方面就不必说了,

web脚本语言开发-web脚本语言怎样修改我想要的?SwitchySharp插件批量添加情景模式

问题描述 web脚本语言怎样修改我想要的?SwitchySharp插件批量添加情景模式 我有段在什么浏览器控制台运行的脚本语言,它运行的目的是批量添加 很多 ip地址和端口,现在我想把端口后面的名字也加上去,该怎么修改代码? (function(Settings){var p = Settings.getObject('profiles'); var t = p['template']; window.prompt().split(';').forEach(function(proxy) { p

c语言-C语言编程,我想用16位表示64种状态,

问题描述 C语言编程,我想用16位表示64种状态, 关于C语言中,我想用16位表示64种状态,比如用1表示LED点亮,0表示LED熄灭,比如用1000 0000 0000 0000表示1#LED灯亮起(因为1用16进制表示为0001),2000 0000 0000 0000表示第2LED灯亮起(因为2用16进制表示为0010),F000 0000 0000 0000 表示1.2,3.4LED灯亮起(因为F用16进制表示为1111),又如0F00 0000 0000 0000表示5.6.7.8LE

设计-c语言 一个输出出现次数最多的字母的程序

问题描述 c语言 一个输出出现次数最多的字母的程序 字母不区分大小写 输出格式:出现的次数 该字母 如果有复数个出现次数最多的字母,就按字母排列顺序输出 例 输入 One Two Buckle My Shoe 输出 3 eo 输入 Once upon a time,there lived a manwhose name wos Lip van Winkle. 输出 8 e 使用以下代码雏形 #include<stdio.h> int main(void) { int i,max=0; char

在页面上放一个文本框和一个按钮,想文本框中输入内容点击按钮,读出输入的内容。发声的。可以听见的 谢谢。急急急急!!!!!!!!!!!!

问题描述 在页面上放一个文本框和一个按钮,想文本框中输入内容点击按钮,读出输入的内容.发声的.可以听见的谢谢.急急急急!!!!!!!!!!!!

c语言-C语言一个字符串的问题

问题描述 C语言一个字符串的问题 #include #include int main(){ char s1[81] s2[81]; scanf(""%s"" s1); scanf(""%s"" s2); char *find = NULL; int len2 = (int)strlen(s2); while ((find = strstr(s1 s2)) != NULL) { while ( *(find + len2) )

VB语言一个关于字符串组合的程序

问题描述 VB语言一个关于字符串组合的程序 这样的数字构成的字符串在VB中怎么穷举? 12*5* 输出12051 12052 ... 12959 解决方案 for i = 0 to 9 for j = 0 to 9 print "12" & i & "5" & j next next

frameset框架中的一个frame页面想弹出一个dialog,使用的jquery easyui

问题描述 frameset框架中的一个frame页面想弹出一个dialog,使用的jquery easyui frameset框架中的一个frame页面想弹出一个dialog,使用的jquery easyui 但没有反应 <div style="margin:20px 0;"> <a href="javascript:void(0)" class="easyui-linkbutton" onclick="$('#dlg