c - getchar() 跳过 C 中的所有其他字符

标签 c visual-studio-2012 getchar

我在 C 语言中完全使用 getchar() 已经有一段时间了。在这种情况下,我试图读取一行并将该行的字符放入一个数组中。但是,在将 getchar() 分配给数组后,它会跳过一些字符。

例如输入“It skips every other”输出是...I\n\n k\n p\n\n v\n r\n\n t\n e\n。 (\n 只是代表新行。)

int N = 0;

char message[80] = {};

do
{
    message[N] = getchar();
    N++;
    printf("%c\n", message[N-1]);
}
while(getchar() != '\n');

感谢您抽出宝贵时间,正如之前所说,几乎每次我尝试使用 getchar() 时,它总是会给出一些意想不到的结果。我不完全理解该函数如何读取字符。

最佳答案

您将调用 getchar() 两次,一次在 while 条件中,另一次在 do-while 体内。

试试这个代码:

int N = 0;
#define MAX_SIZE 80

char message[MAX_SIZE] = {};
char lastChar;

do
{
    lastChar = getchar();  
    if (lastChar == '\n')
        break; 
    message[N] = lastChar;
    N++;
    printf("%c\n", message[N-1]);
}
while(N < MAX_SIZE);

更新: 添加了对数组最大大小的检查,而不是使用无限的 do-while 循环。

关于c - getchar() 跳过 C 中的所有其他字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105926/

相关文章:

c++ - Ubuntu 11.10 链接 perftools 库

c++ - Boost 序列化和文件 IO 非常慢

entity-framework - 从 VS 2012 发布到 Azure 网站时,我的 Entity Framework 种子数据未插入 SQL Azure

c - 如何将 getchar() 与字符串一起使用?

c - 尝试仅使用 getchar/putchar 输出用户输入

c - Printf、scanf 和 For 循环问题

c - 我不明白deleteall(key)函数中这条语句 "cur = prev->next;"的逻辑

c - 求余弦的泰勒级数

visual-studio-2012 - 可用于VSTO开发的最低Office 2013版本是多少?

c - 为什么我应该在 C 代码中像这样使用 getchar() ?