Cyzyt 发表于 2019-8-23 16:10:14

变长数组

#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:30:39

本帖最后由 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)             ;
}

flamer 发表于 2019-8-23 17:03:05

你打的回车就是\n,就是敲回车的时候插入的

Cyzyt 发表于 2019-8-24 15:41:01

jackz007 发表于 2019-8-23 16:30
scanf() 函数不会取输入流中的 '\n',如果想清除这个字符,可以在每次使用 scanf() 函数后,立即用 f ...

那他是第一个printf后面时插入的吗

jackz007 发表于 2019-8-24 16:15:47

本帖最后由 jackz007 于 2019-8-24 16:18 编辑

Cyzyt 发表于 2019-8-24 15:41
那他是第一个printf后面时插入的吗

      键盘缓冲区有 '\n' 字符滞留,受影响的通常是 getchar() 函数,只要在使用该函数前,清空键盘缓冲区就可以了。或者可以换句话说,如果不使用这个函数,也就没有必要清空键盘缓冲区了。

迷雾少年 发表于 2019-8-24 21:17:32

scanf("%d", &n);
加入你输入123然后回车scanf就会解析读取123到变量n中,此时缓冲区中还有字符'\n'.也就是说你每次回车的时候都会多一个'\n'回车字符
页: [1]
查看完整版本: 变长数组