在C中输入单个字符

时间:2014-03-23 08:15:46

标签: c malloc scanf getchar

我有这个代码,我期望从用户那里读取单个字符,然后重新打印它,然后重新分配新内存以存储用户将输入的下一个字符;所有这些重复,直到用户输入' 1'字符。但是,我的程序在用户按下' return'之前不执行任何操作,然后回显整个字符串。为什么它会像这样?

#include <stdlib.h>
#include<stdio.h>

int main()
{
    char *s = (char *)malloc(sizeof(char));
    int i = 1 ;
    do
    {
        scanf(" %c",s+i-1);
        printf("%c" , *(s+i-1));
        i++ ;
        s = (char *)realloc(s , sizeof(char)*i);
    }while(*(s+i-1) != '1');
    printf("\n\n %s" , s);
    return 0;
}

这就是我的期望:

h // input from user
h // the output
w // input from user
w // output from user

但这就是我得到的:

what // input from user
what // output 

我尝试将scanf替换为getchar,但这并没有帮助。

3 个答案:

答案 0 :(得分:1)

输入已缓冲,在用户返回之前不会传送到您的程序。请参阅this questionthis question

您对malloc / realloc的使用与此无关。

答案 1 :(得分:0)

这是因为标准输出流stdout是行缓冲的。这意味着在输出换行符'\n'或缓冲区已满的缓冲区被刷新之前,输出将不会出现在屏幕上。此外,您不应该投射mallocrealloc的结果。您还应该检查malloc的{​​{1}}或calloc的结果。

NULL

答案 2 :(得分:0)

stdin缓冲字符,直到用户按下回车键,因此它不会处理单个字符。