典型题目分析
s2-1 数据输入输出练习
1. 现给定从键盘中输入如下格式的数据,请编程读入该组数据,并按输入的形式输出出来。
Input
1 A 2.5DE 12
Output
1 A 2.5DE 12
对于本题,考察的是利用scanf函数完成各类数据的输入,利用printf函数完成各类数据的输出,系统中题目的说明不够清晰,输入数据中1和A中间有两个个空格,A和2.5中间有一个空格,DE和12中间是一个空格,而输出数据中1和A中间有四个空格,A和2.5中间有两个空格,DE和12中间是1个空格。
因此,需要先接收一个整数,然后再接收一个字符,再接收一个浮点型数(该数只有一位),然后接收两个字符,最后接收一个整数。接受后输出时,前来那个个整数之间用四个空格
//code 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
char c;
float f;
scanf("%d %c%f",&a,&c,&f);//接收时1和A中间的空格不管多少个都由%c前的空格吃掉
printf("%d %c %.1f",a,c,f);//打印时1和A中间有四个空格,A和2.5之间有两个空格
c=getchar();
putchar(c);
c=getchar();
putchar(c);
//也可以调用两次putchar(getchar());
scanf("%d",&a);
printf(" %d",a);//E和12之间有个空格
return 0;
}
如果不考虑空格数量发生变化的事情,比如输入中几个空格输出中也输出多少个空格,就可以使用下面的方法。
有同学想到了一个偷懒的解决方法,就是不根据数据的类型,只是把所有的字符都作为普通字符进行接收,然后直接打印。也就是循环接受一个字符,接受后打印,直到遇到回车换行符。代码为:
//code 2
#include <stdio.h>
#include <stdlib.h>
int main()
{ char c;
while((c=getchar())!='n')
{
putchar(c);
}
return 0;
}
这样的代码在本机上调试的时候看不出问题,但是在瑞格上提交的时候就会显示如下图所示的错误提示:
也就是说输出的结果中除空格和回车等字符外,其他内容都正确。一般出现这种问题,就是输出格式设计有错误。出现问题的原因在于输出中的空格个数与输入不同,输入数据中1和A中间有两个个空格,A和2.5中间有一个空格,DE和12中间是一个空格,而输出数据中1和A中间有四个空格,A和2.5中间有两个空格,DE和12中间是1个空格。因此,用这种偷懒的方法是不行滴,必须按照数据类型的不同获取数据,获取后再按照输出格式的要求输出相应的内容。