因此,我正在製作一個非常基本的shell,它可以逐行讀取內容,並且我遇到了有關循環的問題。 這是我的主:shell逐行讀取
int main(int argc, char* argv[]) {
char* av[ARGVMAX];
int nArgs, i, j, k;
fflush(stdout);
while (fgets(line, LINESIZE, stdin) != NULL && line[0] != '\n') {
for(i = 0; line[i] != '\n'; i++) {
temp[i] = line[i];
}
scanf("%d", &nArgs);
j = 0;
while(j<nArgs) {
temp[i++] = ' ';
scanf("%c", &temp[i++]);
j++;
}
makeargv(temp, av);
runcommand(av);
fflush(stdout);
}
return 0;
}
首先,我想要做的是把該讀成一個整體,由換句話說每一個奇異線,讀一「串」,並把它在數組,用「'分隔每個單詞。
現在我的問題是,無論程序何時在「scanf(」%c「,& temp [i ++])」他不讓我在第一時間輸入任何內容,這意味着只要我輸入循環第一次他跳過那行代碼,但在循環的其他入口(第二次或第三次),他等着我寫東西。
這是什麼意思?難道我做錯了什麼? 預先感謝您!
如果我正確讀取你的代碼,用戶鍵入一個非空行輸入,然後必須鍵入一個數字 - 這是參數的數量,爲了簡潔起見,而且這個數字後面必須跟着N個單個字符,每個字符都會變成一個參數?這不像一個非常愉快的命令行界面。你的代碼還缺乏對緩衝區溢出的保護(如果用戶輸入999999999作爲數字呢?)等。我認爲你需要再次考慮你要求用戶輸入的內容。而且,正如答案所指出的那樣,'%c'將在數字,空格或冒號後面讀取換行符,或者... –