簡體   English   中英

在行(C)上掃描單個單詞

[英]Scan single word on line (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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM