c - 只读取一行的第一个字符

标签 c

我写了一个程序来使用 C 读取一行中的第一个字符,这是我的代码:

#include <stdio.h>

int main(void) {
    char ch;

    printf("Please type text for test(# for terminate)\n");

    while((ch = getchar()) != '#') {
        printf("\n %c", ch);
        while (getchar() != '\n')
            continue;
        printf("\nPlease type text for test(# for terminate)\n");
    }
    return 0;
}

我的问题是,当我将第二个 while 更改为 if 时,程序将打印奇数位置的所有字符(第一个、第三个、第五个....),而不是仅打印第一个字符。不知道为什么

最佳答案

每次调用 getchar() 时,它都会从标准输入中获取一个字符。您在上面的代码中有两次调用 getchar() ,并且它们是交替的(先调用 while() ,然后调用 if() )。然而,只有第一个调用存储返回的字符并打印它,第二个调用只是吃掉这个字符而不对它做任何事情。一个例子:

输入:“示例”

  1. 调用 ch=getchar(),获取“E”,并打印 ch,打印“E”。
  2. getchar() 被调用,获取“x”。没有打印任何内容。
  3. 调用 ch=getchar(),获取“a”,然后打印 ch,打印“a”。
  4. getchar() 被调用,获取“m”。没有打印任何内容。
  5. 调用 ch=getchar(),获取“p”,然后打印 ch,打印“p”。
  6. getchar() 被调用,获取“l”。没有打印任何内容。
  7. 调用 ch=getchar(),获取“e”,并打印 ch,打印“e”。

看看它是如何工作的?

关于c - 只读取一行的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965823/

相关文章:

c++ - C 中的 undefined reference 错误

连接/打印字符串文字

c - 调试 - 字符串问题

c - 如何将图像一张一张地发送到 x264?

c - 在 qemu 中打印内存地址范围

c - 如何优化 U-boot 到内核的切换代码?

c++ - 如何分配具有执行权限的内存?

c - 如何比较结构中的两个字符串

c - MPI_Scatter 用法

c - linux自动删除文件