连续两个scanf()遇到的新问题!看清!不关回车符的事!
网上看到一篇"C语言scanf函数输入时键盘缓冲区\n的问题"博文http://blog.
试了第一个例子就试出问题来了!
以下是原文:
/***********************************************************
程序1
#include "stdio.h"
void main()
{
char a;
char b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d %d",a,b);
}
键盘输入
97<回车>96<回车>
输出
97 96
问题1:调用第一个scanf输入时,键盘缓冲区所有的字符为97\n,
遇到回车,所以缓冲区把97赋值给a。调用第二个scanf输入时,
键盘缓冲区所有的字符为96\n,遇到回车,所以缓冲区把96赋值给b。
以上我的分析对吗?
*************************************************************/
//以下是正文:
#include <stdio.h>
int main(void)
{
int i;
char a,c;
i=scanf("%d", &a);
scanf("%d", &c);
printf("a=%d\t", a);
printf("c=%d\t", c);
printf("i=%d\n", i);
return 0;
}
/*
在 gcc + notepad++ 中的运行结果为:
*****************************************
34
67
a= c=C i=0
67
87
a=0 c=87 i=0
56
79
a=0 c=79 i=2
*****************************************
*/
第一次:输出用%c
第二次:输出用%d
第三次:输出用%d,但把两次输入放在一个scanf()中了。
在ASCII中,十进制数与字符对应关系为:34=" 67=C 56=8。
前两次,i=0,很明显,没有给a赋值,但是,在手机C4droid上试了下,a的情况没变,i值却变成1,显示读取数据成功
第三次,i=2,显示两次都成功读取数据,但是,a的情况却没变化。
新手,就20分,都给了!望大神给解惑啊!
附图一张