关于输入缓冲中'\n'字符的疑问
程序如下:
#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




