逐行读取的Shell

时间:2016-10-16 11:01:43

标签: c arrays shell scanf fgets

所以我正在制作一个非常基本的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“,&amp; temp [i ++])上时”他不让我先输入任何东西,这意味着每当我进入他第一次跳过这一行代码,但是在循环的其他入口处(第二次或第三次),他等着我写一些东西。

这是什么意思?难道我做错了什么? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

行后

scanf("%d", &nArgs);

输入缓冲区中仍有一个newline,这由行

读取
scanf("%c", &temp[i++]);

虽然格式%d(和大多数格式)忽略了输入缓冲区中的任何前导空格,但%c没有,除非你像这样插入space

scanf(" %c", &temp[i++]);
//     ^