扫描行(C)上的单个单词



我的目标是制作一个程序,从输入中扫描一个单词,然后将其保存为一个大字符串。

我确信输入总是单词'n'单词'n'。。。

所以我尝试扫描一个字符并将其保存到一个数组中,然后用' '替换'n'

我的代码:

char c;
char *line;
int len = 0;
while(!feof(stdin))
{
    len++;
    char *line = (char *)malloc(sizeof(char) * len);
    scanf("%c", &c);
    if (c == 'n')
        line[len - 1] = ' ';
    else
        line[len - 1] = c;
}
int q;
for(q = 0; q < len - 1; q++)
    printf("%c", line[q]);

Ouput是错误的。(RUN FAILED (exit value 1, total time: 2s

例如,我想要输入:

one
two
three
four
five

这个用于输出:

"one two three four five"

每次while循环时,您都会分配一个新的line,丢弃旧值和其中的字符。除了最后一个字符,您从不初始化任何东西,所以当循环结束时,line就是垃圾,只有最后一个字符除外。您只想在开始时分配一个足够大的缓冲区ONCE,或者使用realloc使缓冲区更大。

您有while(feof(stdin)),它几乎总是错误的——feof只有在未能从输入中读取字符之后才为真。所以你最终循环了太多次,复制了最后一个角色。请检查scanf的返回值。

我是根据您的回复来做这件事的。

char c;
char *line;
int len = 0;
while (scanf("%c", &c) != EOF) {
    len++;
    line = (char *) realloc(line, sizeof (char) * len);
    if (c == 'n')
        line[len - 1] = ' ';
    else
        line[len - 1] = c;
}

相关内容

  • 没有找到相关文章

最新更新