[英]How to read characters from stdin into an array in c?
我上一次做 C 是在 1991 年,現在我正在幫朋友做作業。
他必須將標准輸入中的字符放入一個數組中。 看起來很簡單。 我想我會用 這個問題作為參考點。
我們有這個:
printf("Input the line\n");
i=read(0, arg, sizeof(char)*9);
IIUC 為我們提供了字符,根據答案注釋,我們應該能夠將字符直接放入 arg 數組中,如下所示:
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
然而,打印這個(repl.it 鏈接) :
./main
Input the line
123 456 789
893 456
所以看起來即使我試圖通過在 while 循環中添加i2<9
來將其限制為索引 [0,8],它仍然會抓取89
並將其放在數組的開頭,因為數組只適合 9 個字符.
為什么是這樣? 我是否以正確的方式解決這個問題?
我們不允許使用 fpurge。 我假設教授正在嘗試教他們如何手動執行此操作...
我不明白你在這里想做什么,
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
上述循環主要用於在read
后消耗輸入 stream 中的剩余輸入。
也就是說,與
i=read(0, arg, sizeof(char)*9);
您正在將9
字符讀入arg
但您輸入了11
字符和\n
。
因此arg
將有內容,
123 456 (null) <---contents
01234567 8 <---indexes
還記得89\n
留在 stream 中。 因此,使用while
循環,您可以從索引0
將89
讀入arg
數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.