逆風祈雨


私信TA

用户名:uq_65471438222

访问量:2791

签 名:

我不信神,但我信祈祷

等  级
排  名 1098
经  验 3214
参赛次数 0
文章发表 11
年  龄 22
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

解题思路:

    字符串本身数组也没多大差别,就一个 '\0'
    先输入字符串的个数,清除缓冲区,通过 for 循环输出数组,输出从第几位开始输出
注意事项:
    VScode 的输出与 Dotcpp 的输出有所不同,其中原理不甚了解
参考代码:

    个人觉得应该为这份

```c

void rest() {

        char a[100];

        int m;

        int n;

        scanf("%d", &n);

        fflush(stdin);

        for (int i = 0; i < n; i++)

            scanf("%c", &a[i]);

        scanf("%d", &m);

        for (int i = m - 1; i < n; i++)

            printf("%c", a[i]);

}

int main() {

    rest();

}

但是,实际是这个通过了,而且Dotcpp 编译器 与 VScode 编译器下的结果不同

void rest1() {

        char a[100];

        int m;

        int n;

        scanf("%d", &n);

        fflush(stdin);

        for (int i = 0; i <= n; i++) {

            scanf("%c", &a[i]);

        }

        scanf("%d", &m);

        for (int i = m; i <= n; i++)

            printf("%c", a[i]);

}

int main() {

    rest1();

}

```

 

0.0分

1 人评分

  评论区

## getchar 与 fflush 函数

**问题:**

- 空格、回车或 TAB 键均认为是字符

- 输入,回车后,输入流:字符 + 换行符

  ​	getchar 从中获取一个字符,换行符会被残留在输入流中

- 再次调用 getchar 或 scanf 输入字符时,实际获取的是上次残留的换行符 \n,无法正确获取想要的字符	

**解决:**

- **方案一:**在每次调用 scanf 或 getchar 后,再调用一次 getchar 用于吸收上次输入缓冲区残留的换行符

- **方案二:**stdio.h 中的 fflush 函数清空输入缓存区 fflush(stdin);

  **注意:**方案二是非标准方式,可能会影响程序的可移植性
2021-09-21 03:34:41
  • «
  • 1
  • »