c - 逐行读取的 shell

标签 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", &temp[i++])”状态时,他都不让我第一次输入任何内容,这意味着每当我进入循环时他第一次跳过了那行代码,但在循环的其他入口(第二次或第三次)他等待我写一些东西。

这是什么意思?难道我做错了什么? 预先感谢您!

最佳答案

行后

scanf("%d", &nArgs);

输入缓冲区中保留有一个换行符,并且由该行读取

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

尽管格式 %d(以及大多数格式)会忽略输入缓冲区中的任何前导空格,但 %c 不会,除非您插入 空格像这样:

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

关于c - 逐行读取的 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40069516/

相关文章:

c - 将部分字符串匹配到字符串数组中的完整字符串

python - 基于另一个列表对列表元素进行分组

Linux find -exec 权限被拒绝

c - 如何使我的 MessageBox 弹出在所有表单的顶部?

c - 使用单循环快速排序

c - 如何在c中交错两个字符串

javascript - 对于对象数组中每个对象中找到的值返回 true

linux - XServer启动后运行shell脚本?

json - .json 文件的 Linux 正则表达式

c - 你能解释一下这个计算噪声平均值的算法吗