第一行是一个正整数N,最大为100。
之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。
输出
先将输入中的前N行字符串(可能含有空格)原样输出,
再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。
每行输出之间输出一个空行。
样例输入
2
www.dotcpp.com DOTCPP
A C M
D O T CPP
样例输出
www.dotcpp.com DOTCPP
A C M
D
O
T
CPP
题目来源:https://www.dotcpp.com/oj/problem1094.html
思路分析:通过题目的要求,可以明确知道,在前n行,是将整行的字符串原样输出的,但是之后的每一行字符串,只要遇到一个空格,就会发生换行,输出空格前的字符串,遇到换行符也是一样,将这个换行符前的字符串输出,并且,每一次输出之间,都有一行进行分割。
所以这里针对输出n行之后的字符串时
,利用到了字符串输入中比较巧妙的地方了:scanf("%s",字符串变量名),通过这种方式输入字符串
,那么这种方式输入到底有什么巧妙之处呢?
我们都知道,通过scanf("%s",字符串变量名)这种方式输入字符串,只要遇到了空格/制表符/换行符,scanf函数就会认为字符串已经输入结束了,自动在字符串后面加上结束标记
。例如输入Welcome to C,通过这种方式输入,最后输出的字符串只有Welcome。所以只要通过这一种方式输入后面n行的字符串,就能有效的解决通过空格或者换行符进行分割输出。
完整代码:
#include<stdio.h>
int main()
{
int n,i = 1;
char msg[1001];
scanf("%d",&n);
/*
这一步十分重要的,如果没有这一步,那么这时候就会导致下面没有办法输入字
*/
getchar();
for(i = 1; i <= n; i++){
/*
针对前n行的情况,利用gets进行输入字符串(gets函数输入字符串的时候,只有遇到换行符
才会认为输入结束,并且自动在字符串后面添加自动结束标志,所以空格/制表符会作为字符
保留在字符串中),同时在通过puts函数输出字符串之后,还有输出一行,使输出的每一行字符
串之间有一个空行分割着
*/
gets(msg);
puts(msg);
printf("\n");
}
while(scanf("%s",msg) != EOF){
/*
针对n行之后的情况,这里利用了scanf函数输入字符串,puts函数输出字符串
输出字符串之后,还要输出一个空行,从而使得每一行字符串都有一个空行分割着
*/
puts(msg);
printf("\n");
}
return 0;
}
输出结果:
说的不好的地方,请大家指正哈!!!
刚刚受到读者的评论,说没有需要再输入n之后,需要输入一个getchar(),它的作用是什么呢?那么我们来检验一下,如果没有getchar()会发生什么?
没有getchar()语句对应的代码:
#include<stdio.h>
int main()
{
int n,i = 1;
char msg[1001];
scanf("%d",&n);
//getchar();//这一步十分重要的
for(i = 1; i <= n; i++){
/*
针对前n行的情况,利用gets进行输入字符串(gets函数输入字符串的时候,只有遇到换行符
才会认为输入结束,并且自动在字符串后面添加自动结束标志,所以空格/制表符会作为字符
保留在字符串中),同时在通过puts函数输出字符串之后,还有输出一行,使输出的每一行字符
串之间有一个空行分割着
*/
gets(msg);
puts(msg);
printf("\n");
}
while(scanf("%s",msg) != EOF){
/*
针对n行之后的情况,这里利用了scanf函数输入字符串,puts函数输出字符串
输出字符串之后,还要输出一个空行,从而使得每一行字符串都有一个空行分割着
*/
puts(msg);
printf("\n");
}
return 0;
}
对应的运行结果和含有getchar()语句的结果进行比较:
如果还是不太能构理解,那么请参考下面的博客:
https://blog.csdn.net/peterXu00800/article/details/73467555?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161841162316780269832076%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161841162316780269832076&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-73467555.first_rank_v2_pc_rank_v29&utm_term=gets%E6%B2%A1%E6%9C%89%E8%BE%93%E5%85%A5
如果有说的不是很好的地方,还请大家多多指教哈!!!