变长数组
#include <stdio.h>int main()
{
int n, i;
printf("请输入字符的个数:");
scanf("%d", &n);
char a;
printf("请开始输入字符:");
getchar(); // 将标准输入流中剩下的 '\n' 扔掉
for (i = 0; i < n; i++)
{
scanf("%c", &a);
}
a = '\0';
printf("你输入的字符串是:%s\n", a);
return 0;
}
标准输入流中的'\n'是什么时候插入的啊?是第一个printf后面吗?什么时候会出现类似情况呢?{:10_282:} 本帖最后由 jackz007 于 2019-8-23 16:35 编辑
scanf() 函数不会取输入流中的 '\n',如果想清除这个字符,可以在每次使用 scanf() 函数后,立即用 fflush() 函数清洗输入缓冲区,就像下面这样:
#include <stdio.h>
int main()
{
int n , i ;
printf("请输入字符的个数:") ;
scanf("%d", & n) ;
fflush(stdin) ;
char a ;
printf("请开始输入字符:") ;
for (i = 0 ; i < n ; i ++) scanf("%c" , & a) ;
fflush(stdin) ;
a = '\0' ;
printf("你输入的字符串是:%s\n", a) ;
}
你打的回车就是\n,就是敲回车的时候插入的 jackz007 发表于 2019-8-23 16:30
scanf() 函数不会取输入流中的 '\n',如果想清除这个字符,可以在每次使用 scanf() 函数后,立即用 f ...
那他是第一个printf后面时插入的吗 本帖最后由 jackz007 于 2019-8-24 16:18 编辑
Cyzyt 发表于 2019-8-24 15:41
那他是第一个printf后面时插入的吗
键盘缓冲区有 '\n' 字符滞留,受影响的通常是 getchar() 函数,只要在使用该函数前,清空键盘缓冲区就可以了。或者可以换句话说,如果不使用这个函数,也就没有必要清空键盘缓冲区了。 scanf("%d", &n);
加入你输入123然后回车scanf就会解析读取123到变量n中,此时缓冲区中还有字符'\n'.也就是说你每次回车的时候都会多一个'\n'回车字符
页:
[1]