69,381
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int main(void)
{
int n = 0;
char ch = 0;
printf("Input n: ");
scanf("%d", &n);
printf("Input A - D: ");
//scanf("%c", &ch); //方法1:消除上一个'/n' 有效
//fflush(stdin); //方法2:消除上一个'/n' 无效
//scanf(" %c", &ch); //方法3:(前边添加一个空格)消除上一个'/n' 有效
scanf("%c", &ch); //大家都用什么方法,为什么fflush不可以呢?
printf("\n");
if (ch == 'A')
{
}
else
{
}
printf("This Program is end!\n");
return 0;
}
#include <stdio.h>
int main(void)
{
int n = 0;
char ch = 0;
printf("Input n: ");
scanf("%d", &n);
printf("Input A - D: ");
fflush(stdout);
rewind(stdin);
scanf("%c", &ch);
printf("\n");
printf("This Program is end!\n");
return 0;
}
关于检测返回值,听起来可行,但是觉得我就一个scanf,就得着大动干戈吗?显得有点麻烦了。您说呢?[/quote]
我很高兴地告诉你,你理解错误:
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。#include <stdio.h>
int main()
{
char ch[12];
scanf("%5c", ch);
for(int i=0; i<5; ++i)
printf("%c", ch[i]);
return 0;
}
[/quote][quote=引用 20 楼 kangear 的回复:]
[quote=引用 18 楼 xiayiguo 的回复:]
可是不明白为什么 fflush(stdin)不行? 请指教!
因为 scanf %c 只是读入一个字符
#include <stdio.h>
int main()
{
char ch[12];
scanf("%5c", ch);
for(int i=0; i<5; ++i)
printf("%c", ch[i]);
return 0;
}
可是不明白为什么 fflush(stdin)不行? 请指教!
[quote=引用 18 楼 xiayiguo 的回复:]
可是不明白为什么 fflush(stdin)不行? 请指教!
可是不明白为什么 fflush(stdin)不行? 请指教!
深入理解“流”这个概念。 理解后就知道可以“吸收”\n,可以忽略。
#include <stdio.h> char s[]="123 ab\t4\n5\n6"; char *p; char c; int n,k; char *ch(char cc) { static char s[3]; if ('\t'==cc) sprintf(s,"\\t"); else if ('\n'==cc) sprintf(s,"\\n"); else sprintf(s,"%c",cc); return s; } void main() { p=s; while (1) { k=sscanf(p,"%c%n",&c,&n); printf("k,c,n=%d,%s,%d\n",k,ch(c),n); if (1==k) { p+=n; } else if (0==k) { printf("skip char[%s]\n",ch(p[0])); p++; } else {//EOF==k break; } } printf("End.\n"); } //k,c,n=1,1,1 //k,c,n=1,2,1 //k,c,n=1,3,1 //k,c,n=1, ,1 //k,c,n=1,a,1 //k,c,n=1,b,1 //k,c,n=1,\t,1 //k,c,n=1,4,1 //k,c,n=1,\n,1 //k,c,n=1,5,1 //k,c,n=1,\n,1 //k,c,n=1,6,1 //k,c,n=-1,6,1 //End.
while (getchar () != '\n')
continue;
[quote=引用 8 楼 kangear 的回复:] [quote=引用 4 楼 evencoming 的回复:] scanf("%*[^\t\n\r]");