问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
#include <stdio.h>
#include <string.h>
int main (){
int n,m;char a[100];
scanf("%d\n",&n);
for(int i=0;i<n;i++)
{
scanf("%s",a);
m=strlen(a);
if(a[m-1]=='y'||a[m-1]=='s'||a[m-1]=='x'||a[m-1]=='o') printf("%ses\n",a);
else if(a[m-1]=='h'&&(a[m-2]=='c'||a[m-2]=='s')) printf("%ses\n",a);
else printf("%ss\n",a);
}
return 0;
}
我是这么想的 scanf("%d\n",&n);scanf明明不需要\n符号,虽然我知道因为如果读取了换行符号那么缓冲区就没有了回撤,那么久不需要getchar()去吸收回撤了,所以说一般人想法是scanf("%d",&n);后面加一个getchar()请问这对的吗?但是我有疑问scanf不是不会读取\n空格这些符号的么好奇怪,还有一个问题对于for循环里面的scanf("%s",a);明明回撤一直在缓冲区一直循环到结束,为啥后面还能继续输入,是因为遇到printf里的\n还是遇到}这个符号缓冲区会刷新,其实就是想知道缓冲区刷新的条件。问题比较多因为都不讲