Итак, я создаю очень базовую оболочку, которая читает материал по строкам, и у меня возникают проблемы с циклами. Это моя главная:Оболочка, которая читается по строкам
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 для краткости; и за числом должно следовать N одиночных символов, каждый из которых станет аргументом? Это не очень приятный интерфейс командной строки. Ваш код также не имеет защиты от переполнения буфера (что, если пользователь вводит 999999999 в качестве номера?) И т. Д. Я думаю, вам нужно снова подумать о том, что вы требуете от пользователей. И, как отмечается в ответе, '% c' будет читать новую строку после номера, или пробела, или двоеточия, или ... –