2015-09-06 1 views
0

J'ai créé un programme que j'ai ensuite utilisé pour créer un fichier à partir de sa sortie, maintenant je veux faire un de plusieurs programmes à exécuter rediriger ce fichier (ou canaliser la sortie de les autres programmes à celui-ci). J'ai utilisé le code suivant comme un test pour le premier programmeErreur piping/redirection à partir d'un fichier ou une commande dans Windows

int main (int argc, char* argv[]) 
{ 

    long long int n = 0; 
    char str[100]; 

    while (str != NULL) 
    { 
     fscanf(stdin,"%s\0", str); 
     printf("%lld\t%s\n", n, str); 

     n++; 
    } 

    return 0; 

} 

Le programme se termine correctement jusqu'à la dernière ligne du fichier redirigé ou de sortie canalisé, qui maintient alors repearing indéfiniment jusqu'à ce que j'arrête l'exécution avec ctrl-c (Les fenêtres). Je ne sais pas pourquoi cela arrive, j'ai essayé de rincer stdin, stdout et tout ce que je pensais et pas de chance.

Qu'est-ce que je fais mal ou manquant?

Merci d'avance.

+0

'str! = NULL' ne peut jamais être faux. Regardez les documents scanf pour voir ce qu'il fait en cas d'erreurs/conditions de fin de flux. – Mat

Répondre

0
while (str != NULL) 
{ 
    fscanf(stdin,"%s\0", str); 
    printf("%lld\t%s\n", n, str); 

    n++; 
} 

remplacé par

while (scanf("%s", str) != EOF) 
{ 
    printf("%lld\t%s\n", n, str); 
    n++; 
} 

résolu le problème.

1
char str[100]; 
while (str != NULL) 

str est traité comme un pointeur vers le premier caractère dans la matrice, de sorte que sa valeur change jamais, ce qui signifie que la boucle ne sera jamais fin.

+0

changer la condition pour vérifier la valeur de retour de scanf donne le même résultat. – SJPRO

+0

vérifié à! = EOF. Résolu, merci! – SJPRO