2010-03-29 8 views
1

J'écrivais un programme qui peut lire un ensemble de fichiers de nombres appelé dog.txt; et écrit également à deux fichiers séparant impair et pair. J'ai pu compiler mon programme cependant, la sortie attendue n'est pas la même que ce qui était censé être des nombres pairs dans un fichier appelé EVEN, les nombres impairs dans le fichier impair.programme qui écrit les nombres pairs et impairs

#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char *argv[]) 
{ 
    int i; 
    int even,odd; 
    int num; 

    if (argc != 4) { 
    printf("Usage: executable in_file output_file\n"); 
    exit(0); 
    } 

    FILE *dog = fopen(argv[1], "r"); 
    FILE *feven= fopen(argv[2], "w"); 
    FILE *fodd= fopen (argv[3], "w"); 
    while (fscanf(dog, "%d", &num) != EOF) 
    { 
     if (0==i%2){ 
     i++; 
     printf("even= %d\n", num); 
     } 
     else if(i!=0){ 
     i++; 
     printf("odd= %d\n", num); 
     } 
    } 
    fclose(feven); 
    fclose(fodd); 
    fclose(dog); 

    return 0; 
} 

sortie:

even= 1 
odd= 2 
even= 34 
odd= 44 
even= 66 
odd= 78 
even= 94 
odd= 21 
even= 23 
odd= 54 
even= 44 
odd= 65 
even= 78 
odd= 68 
even= 92 
+3

Est-ce un devoir? :) –

+0

Les devoirs par hasard? Dans ce cas, vous devez apprendre comment fonctionnent les boucles et l'E/S du fichier; Cet exemple montre simplement que vous vous trompez vraiment. – EFraim

+6

Pas moyen, c'est clairement une application d'entreprise. –

Répondre

0

Le code contient aucune instruction d'écrire dans les fichiers de sortie. Il écrit seulement à stdout.

4

Vous vérifiez i % 2, pas num % 2. Je ne suis même pas sûr de ce que fait i dans cet exemple - peut-être que vous prévoyez de l'utiliser plus tard. J'imagine que le code pour écrire ces nombres dans les fichiers viendra plus tard, une fois que vous aurez corrigé ce bogue.

+0

'i' n'est même pas initialisé correctement. –

0

La fonction printf écrit à l'écran (plus correctement, elle écrit sur "sortie standard", mais c'est généralement l'écran). Vous voulez écrire dans un fichier. Vous avez ouvert des fichiers appelés feven et fodd. Pour leur écrire, vous devez utiliser l'appel fprintf, qui fonctionne comme printf, sauf qu'il prend un argument supplémentaire (le plus à gauche), qui est le FILE* que vous voulez écrire, par exemple.

FILE *fmyfile = fopen("myfile.txt", "w"); 
fprintf(fmyfile, "The magic number is %d!", 3); 

De plus, vos résultats sont incorrects, mais c'est un problème sans rapport.

0

En plus du problème printf/fprintf, dans tout compilateur moderne décent, ce code devrait générer un avertissement que vous n'attribuez aucune valeur initiale à i.

+2

Les variables non initialisées ne sont pas une erreur de compilation en C ou C++, elles ont juste une valeur arbitraire (quelle qu'elle soit dans la mémoire qu'elles utilisent) jusqu'à ce que vous les initialisiez. Un bon compilateur devrait avertir, cependant. –

+0

@Tyler: Tout à fait vrai, bon point. Heck, les compilateurs que j'utilisais * il y a vingt ans * incluaient ces sortes de charpies. Je suppose qu'il devrait * compiler *, juste avec des avertissements. Mais encore, ignorez les avertissements à vos risques et périls. :-) –

Questions connexes