给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
两种解决办法:
方法一
#include<stdio.h> char xx[80][80]; int main(){ int i = 0; while( scanf("%s",xx[i]) != EOF){ i++; } for(int j = i - 1;j >= 0;j--){ if(j != 0) printf("%s ",xx[j]); else printf("%s",xx[j]); } return 0; }
不断读取字符串,直到 文件结尾
EOF 详解
遇到这个表达式:scanf("%d%d",&a,&b)!=EOF;
如果a和b都被成功读入,那么上面表达式的结果为2;
如果只有一个读入,那么上面表达式的结果为1;
如果a&&b都没有读入,那么上面表达式的结果为0(若a没有读入,则直接放弃b的读入);
如果遇到错误或者文件结尾,那么上面表达式的结果为EOF,对应的有符号数时-1;
如果遇到Crrl+Z,那么上面表达式的结果为EOF,对应的有符号数时-1;
方法二
由于 scanf() 遇到空白符就会停止输入,截断,而该空白符会被留在缓冲区内,由题目
所以,只需要判断 getchar() 是否等于 ' ' ,来决定是否继续读取字符串。
#include<stdio.h> char xx[80][80]; int main(){ int i = 0; scanf("%s",xx[i]); i++; while(getchar() == ' '){ scanf("%s",xx[i]); i++; } for(int j = i - 1;j >= 0;j--){ if(j != 0) printf("%s ",xx[j]); else printf("%s",xx[j]); } return 0; }
输入字符串时:
scanf 碰到缓冲区里面的空字符(空格,tab,回车,换行就会截断并添加 )
gets 是要等回车才截断字符串并添加 的
比如用输入字符串:abcdefg hijk回车
用scanf的话,会得到abcdefg,而gets则是:abcdefg hijk
scanf 遇到空白符后会结束输入,空白符会留在缓冲区!!!
可以用 scanf("%[^ ]" , str) 输入一行数据包括空格,直到遇到换行符 ' '