CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

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

楼主tuojue3000(tuojue)2005-04-01 18:16:19 在 C/C++ / C语言 提问

程序如下:  
   
  #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,怎会有相关呢?  
  第四个疑问:这其中内存的缓冲区有更新吗?还是一直地往后储存输入?  
   
  能详细解说一下此程序中缓冲与赋值的状态与过程吗? 问题点数:0、回复次数:15Top

1 楼lyx6988()回复于 2005-04-01 18:27:34 得分 0

getchar()忽略缓冲区中的空格Top

2 楼du51(郁郁思扬)回复于 2005-04-01 18:44:59 得分 0

第一.不执行.  
  第二.如lyx6988所说  
  第三.DLE是16       10是换行.  
  Top

3 楼tuojue3000(tuojue)回复于 2005-04-01 18:47:55 得分 0

to     lyx6988()   :  
   
   
  getchar()忽略缓冲区中的空格,但会取'\n'字符?Top

4 楼du51(郁郁思扬)回复于 2005-04-01 18:48:05 得分 0

第四.过程中没有更新.getchar()从中提取走两个回车.  
  定不准.Top

5 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2005-04-01 21:12:03 得分 0

干吗这样写呢?把scanf   和   getchar()从while   中分离出来结果是  
  完全不同的。Top

6 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-01 21:13:27 得分 0

第二个疑问:第一次的scanf()输入数字后的空格并没有被第二次的scanf()赋值到b中,这是为何?  
  =============================  
  第二次的时候空格被跳过。Top

7 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-01 21:14:20 得分 0

第一个疑问:在此程序中,若不输入任何字符,只是按空白键(键Enter   tab   back),程序是不执行,还是在循环执行、判断呢?  
  =========  
  不执行Top

8 楼azhui3000(阿追3000)回复于 2005-04-01 21:57:29 得分 0

不是的  
  可写以下程序一试:  
  #include<stdio.h>  
  int   main(){  
  char   ch;  
  scanf("%c",&ch);//或ch=getchar();  
  printf("%c",ch);  
  return   0;  
  }  
   
  程序都执行,只是输出两行空行  
  Top

9 楼277894613(秒大刀)回复于 2005-04-01 23:42:02 得分 0

输入缓冲真的很烦的Top

10 楼du51(郁郁思扬)回复于 2005-04-01 23:49:18 得分 0

to   azhui3000(阿追3000)    
  你的程序怎么可能输出两行呢.根本不可能.  
  就是全取全输出也是一行.而且这也不可能的.Top

11 楼azhui3000(阿追3000)回复于 2005-04-01 23:55:33 得分 0

我用的是VC6的,  
  我说的是我写的输出,  
  也可能是一行吧Top

12 楼azhui3000(阿追3000)回复于 2005-04-01 23:56:13 得分 0

敲一个enterTop

13 楼du51(郁郁思扬)回复于 2005-04-02 00:27:02 得分 0

呵呵.楼上别气.我也是无意说的.Top

14 楼crcr(游侠)回复于 2005-04-02 14:10:06 得分 0

getchar()忽略缓冲区中的空格  
  Top

15 楼crcr(游侠)回复于 2005-04-02 14:13:50 得分 0

getchar()忽略缓冲区中的空格Top

相关问题

  • 关于引用字符串的疑问?
  • 字符数组比较疑问
  • 比较字符串的疑问
  • 有关VC2005字符处理的疑问?
  • 关于Winsocket 发送缓冲的疑问
  • 创建N个字符串???
  • 求助:向键盘缓冲区发送字符。
  • 关于字符串和缓冲区转换的问题……
  • 请问缓冲区里面的 "烫"是什么字符?
  • 怎么取出一个字符串左边的n个字符?

关键词

  • 字符
  • 执行
  • 赋值
  • 疑问
  • getchar
  • 输入
  • 程序
  • scanf
  • 输出
  • 空格

得分解答快速导航

  • 帖主:tuojue3000

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo