C语言 格式输入问题

当运行依次程序时,从键盘输入
aa bb <回车>
cc dd <回车>

则下面程序的运行结果是_____

#include<stdio.h>
main()
{
char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);
puts(a3);puts(a4);
}

答案是 aa
bb

cc dd

书上说scanf语句以回车 空格 做为结束符
1.那么当输入字符型数据时 为什么我记得有的书上说输入空格后 空格会被赋值给字符变量?
2.题里面 为什么最后 a1=aa a2=bb a3=null a4=cc dd 是?

scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中

你的题目分析如下:
aa后面是空格,所以a1的储存结束,a1=aa
然后bb你按了回车,a2的储存结束,a2=bb

由于你bb完,按了回车,回车留在缓冲区中,然后执行gets(a3),a3遇到缓冲区的回车,a3结束。
然后你按了cc dd 执行gets(a4),a4储存cc dd,由于你回车,a4结束。
然后打印puts会自动换行,一个puts换一行~
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-22
scanf语句是可以以空格为作为结束符的,所以aa和bb之间的空格符起了作用,所以a1为aa
a2为bb
下面是MSDN上队char *gets( char *buffer );函数的一个注意事项的描述
The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line.
主要内容翻译过来就是,gets函数读取标准输入流stdin然后存储他们到buffer中。一行可以有所有字符组成,包括换行符 ('\n'). 。gets函数在返回时会将换行符替换为结束符null('\0') ;
这就是你的a3为什么是一个null的原因了,因为前面输入时,我们按了键盘上的回车键,它会产生一个换行符,这个换行符被替换为null赋给了a3.
第2个回答  2011-02-22
uble型的能用%f输入,编译器会自动提高精度。
float型的也能用%lf输入,但是会有一半的精度丢失。double型的准确有效数字是小数点后16位,float型是7位。如果你输入一个数字,比如1.234567890123,用double型的话会全部输入,但用float型的话从9开始以后的数字就全丢弃了,你再把它打印出来的话你就会发现从第8位以后的都能不是你输入的。

C语言为什么一个字符也不能输入。
输入缓冲区问题:当您使用标准输入函数(如scanf())来获取用户输入时,输入的字符会被缓存在输入缓冲区中,直到被读取。如果输入缓冲区中还有其他未读取的字符,可能会导致无法输入新的字符。这种情况下,您可以尝试清空输入缓冲区,例如通过调用fflush(stdin)来清空缓冲区。输入格式不匹配:如果您使用scanf...

c语言输入输出问题
"%lld"和"%llu"是linux下gcc\/g++用于long long int类型(64 bits)输入输出的格式符。而"%I64d"和"%I64u"则是Microsoft VC++库里用于输入输出__int64类型的格式说明。Dev-C++使用的编译器是Mingw32,Mingw32是x86-win32 gcc子项目之一,编译器核心还是linux下的gcc。进行函数参数类型检查的是在编译阶...

c语言有关scanf的一个问题
一、scanf是一个格式输入函数,是按格式输入的。所以"%d,%d"是什么样的格式,你就要以什么的格式输入。像这样的scanf("%d,%d",&a,&b);,你就要以3,4这样的格式,中间以逗号隔开,因为你的格式输入中有一个逗号。二、如果中间没任何符号的scanf("%d%d",&a,&b);,就应该以空格,可以是多个空...

很急,一道c语言程序,为什么我输入什么数最后结果都得0.00?
输入格式问题。由于定义的x是double,所以要用%lf include<stdio.h> include<math.h> void main(){ double x,y;printf("输入数据:\\n");scanf("%lf",&x);\/\/这里改成%lf,就行 if(x<=5)y=0;else if((x>5)&&(x<=10))y=sin(x);else y=cos(x)+sin(x);printf("y=%.2f\\...

C语言 格式输入问题
scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\\0',但是回车键仍会留在输入的缓冲区中。gets:可接受回车键之前输入的所有字符,并用'\\n'替代 '\\0'.回车键不会留在输入缓冲区中 你的题目分析如下:aa后面是空格,所以a1的储存结束,a1=aa 然后bb你按了回车,a2的储存结束,a2=bb ...

c语言输入输出问题???
1) 类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:格式字符 意 义 d 以十进制形式输出带符号整数(正数不输出符号)o 以八进制形式输出无符号整数(不输出前缀0)x,X 以十六进制形式输出无符号整数(不输出前缀Ox)u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 ...

C语言输入格式问题
i=scanf("%d%d,%d",&x,&y,&z);上面这句语句里的scanf的双引号下面的格式控制符的意思是「一个整型、一个整型、一个逗号、一个整型」,所以输入的时候也要按「一个整型、一个整型、一个逗号、一个整型」的样式输入。当然了,第一个整型和第二个整型之间要么用空格,要么用回车来分隔,这是...

c语言printf()函数格式化输入格式为%.2f。
float a,b;printf("请输入两个浮点数:");scanf("%f%f",&a,&b);printf("和为:%.2f",a+b);return 0;} 扩展内容:printf函数中的format:Format 参数是包含三种对象类型的一个字符串:无格式字符复制到输出流;转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;转义序列。通常意义...

C语言数据频率问题: 输入格式: 输入有多组数据。 每组数据两行。 第...
1、首先打开visual studio软件,新建一个C语言文件。2、接着在C语言文件的顶部导入库内容。3、接着运用scanf函数接收用户输入的字符串。4、然后我们利用printf函数打印一下用户输入的内容。5、运行程序以后就会弹出如下图所示的CMD界面,我们输入内容就会自动接收到,然后原样输出内容。6、最后如果你接收...

C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?用s...
C语言中的scanf函数主要用于从标准输入流中读取数据,其基本格式是scanf(“输入格式”,“输入地址”)。对于字符串的读取,虽然理论上可以通过定义字符指针并逐个读取字符,但在实践中,特别是处理用户输入时,理解并正确使用scanf的特性是至关重要的。总的来说,添加空格到scanf的输入格式是提高代码健壮性...

相似回答
大家正在搜