关于输入缓冲中'\n'字符的疑问

tuojue3000 2005-04-01 06:16:19
程序如下:

#include<stdio.h>

int main(){
char ch;
int a,b,c;
c=5;

printf("Enter first number:");
while(scanf("%d",&a)!=1){
while((ch=getchar())!='\n')putchar(ch);
printf(" is not a number .\nplease enter a number such as 2.5,-22 or 3:");
}
printf("Enter second number:");
while(scanf("%d",&b)!=1){
while((ch=getchar())!='\n')putchar(ch);
printf(" is not a number .\nplease enter a number such as 2.5,-22 or 3:");
}
c=getchar();
printf("%d %d %d\n\n \a",a,b,c);
return 0;
}


第一个疑问:在此程序中,若不输入任何字符,只是按空白键(键Enter tab back),程序是不执行,还是在循环执行、判断呢?
第二个疑问:第一次的scanf()输入数字后的空格并没有被第二次的scanf()赋值到b中,这是为何?
第三个疑问:显然输出c的值不是初赋值时的5,在我机上输出是10,这是因为getchar()将\n值赋值给c, 但ASC码值为10的是DLE,怎会有相关呢?
第四个疑问:这其中内存的缓冲区有更新吗?还是一直地往后储存输入?

能详细解说一下此程序中缓冲与赋值的状态与过程吗?
...全文
169 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
du51 2005-04-02
  • 打赏
  • 举报
回复
呵呵.楼上别气.我也是无意说的.
  • 打赏
  • 举报
回复
getchar()忽略缓冲区中的空格
  • 打赏
  • 举报
回复
getchar()忽略缓冲区中的空格
azhui3000 2005-04-01
  • 打赏
  • 举报
回复
敲一个enter
azhui3000 2005-04-01
  • 打赏
  • 举报
回复
我用的是VC6的,
我说的是我写的输出,
也可能是一行吧
du51 2005-04-01
  • 打赏
  • 举报
回复
to azhui3000(阿追3000)
你的程序怎么可能输出两行呢.根本不可能.
就是全取全输出也是一行.而且这也不可能的.
277894613 2005-04-01
  • 打赏
  • 举报
回复
输入缓冲真的很烦的
azhui3000 2005-04-01
  • 打赏
  • 举报
回复
不是的
可写以下程序一试:
#include<stdio.h>
int main(){
char ch;
scanf("%c",&ch);//或ch=getchar();
printf("%c",ch);
return 0;
}

程序都执行,只是输出两行空行
zhousqy 2005-04-01
  • 打赏
  • 举报
回复
第一个疑问:在此程序中,若不输入任何字符,只是按空白键(键Enter tab back),程序是不执行,还是在循环执行、判断呢?
=========
不执行
zhousqy 2005-04-01
  • 打赏
  • 举报
回复
第二个疑问:第一次的scanf()输入数字后的空格并没有被第二次的scanf()赋值到b中,这是为何?
=============================
第二次的时候空格被跳过。
guyanhun 2005-04-01
  • 打赏
  • 举报
回复
干吗这样写呢?把scanf 和 getchar()从while 中分离出来结果是
完全不同的。
du51 2005-04-01
  • 打赏
  • 举报
回复
第四.过程中没有更新.getchar()从中提取走两个回车.
定不准.
tuojue3000 2005-04-01
  • 打赏
  • 举报
回复
to lyx6988() :


getchar()忽略缓冲区中的空格,但会取'\n'字符?
du51 2005-04-01
  • 打赏
  • 举报
回复
第一.不执行.
第二.如lyx6988所说
第三.DLE是16 10是换行.
lyx6988 2005-04-01
  • 打赏
  • 举报
回复
getchar()忽略缓冲区中的空格

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧