Shell 逐行读取
Shell that reads line by line
所以我正在制作一个非常基本的 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;
}
首先,我要做的是将读取的每个单数行变成一个整体,换句话说,读取一个 "string" 并将其放入一个数组中,将每个单词与一个 ' '.
现在我的问题是,每当程序打开 "scanf("%c", &temp[i++])" 他不让我一开始就输入任何内容,这意味着每当我第一次进入循环他有点跳过那行代码,但在循环的其他入口(第二次或第三次)他等着我写东西。
这是什么意思?难道我做错了什么?
提前致谢!
行后
scanf("%d", &nArgs);
输入缓冲区中还剩下一个newline
,这被行读取
scanf("%c", &temp[i++]);
虽然格式 %d
(和大多数格式)忽略输入缓冲区中的任何前导空格,但 %c
不会,除非您插入 space
像这样:
scanf(" %c", &temp[i++]);
// ^
所以我正在制作一个非常基本的 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;
}
首先,我要做的是将读取的每个单数行变成一个整体,换句话说,读取一个 "string" 并将其放入一个数组中,将每个单词与一个 ' '.
现在我的问题是,每当程序打开 "scanf("%c", &temp[i++])" 他不让我一开始就输入任何内容,这意味着每当我第一次进入循环他有点跳过那行代码,但在循环的其他入口(第二次或第三次)他等着我写东西。
这是什么意思?难道我做错了什么? 提前致谢!
行后
scanf("%d", &nArgs);
输入缓冲区中还剩下一个newline
,这被行读取
scanf("%c", &temp[i++]);
虽然格式 %d
(和大多数格式)忽略输入缓冲区中的任何前导空格,但 %c
不会,除非您插入 space
像这样:
scanf(" %c", &temp[i++]);
// ^