Je crée donc un shell très basique qui lit les choses ligne par ligne et j'ai des problèmes avec les boucles. Ceci est mon principal:Shell qui lit ligne par ligne
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;
}
Tout d'abord, ce que je suis en train de faire est de transformer chaque ligne singulière qui est lu dans un tout, par d'autres mots, la lecture d'une « chaîne » et le mettre dans un tableau, en séparant chaque mot avec un ''. Maintenant, mon problème est, quand le programme est sur "scanf ("% c ", & temp [i ++])" il ne me laisse pas taper quoi que ce soit sur le premier coup, ce que cela signifie est que chaque fois que j'entre la boucle pour la première fois il saute cette ligne de code, mais sur les autres entrées de la boucle (deuxième ou troisième fois) il attend que j'écrive quelque chose.
Qu'est-ce que cela signifie? Est-ce que je fais quelque chose de mal? Merci d'avance!
Si je lis correctement votre code, l'utilisateur tape une ligne d'entrée non vide, puis doit taper un nombre - qui est le nombre d'arguments, N pour la brièveté; et le nombre doit être suivi par N caractères uniques, dont chacun deviendra un argument? Cela ne ressemble pas à une interface de ligne de commande très agréable. Votre code manque également de protections contre les dépassements de tampon (que se passe-t-il si l'utilisateur tape 999999999 comme numéro?), Etc. Je pense que vous devez repenser ce que vous demandez aux utilisateurs de saisir. Et, comme les notes de réponse, '% c' lira le retour à la ligne après le nombre, ou l'espace, ou deux points, ou ... –