2010-09-28 8 views
1

J'ai un problème avec mon code, de bonnes nouvelles est que j'ai effectivement identifié le problème, les mauvaises nouvelles sont je ne comprends pas pourquoi c'est un problème. Aussi devrait-il être de retour ou de sortie? C'est ma fonction getNums(), ... jusqu'ici. d'abord mon code appelle getLine() qui obtient la ligne et retourne sa longueur de caractère. Ensuite, obtenir nums est donné, la ligne, la longueur de la ligne, et un tableau vide pour mettre des chiffres dans. Et est supposé retourner le nombre de chiffres, il suffit de mettre dans.Débutant ne peut pas voir pourquoi le code est erroné, mais sait où il est erroné

int getNums(char s[], int endMarker, int numarray[]) 
{ 
    char c; 
    double value; 
    int counter =0; 
    int i,j; 
    for(i=0;i<endMarker;i++) { 
     while ((c=s[i]!='\n')&&(c!=' ')) { 
      //errors 
      if ((c<'0') || (c>'9')) { 
       return(-1); //was exit testing return, **this always kicks me out** 
       if(counter > 6){ 
        return(-2); 
       } //was exit testing return 
       s[i]=c; 
       i++; 
       value = value*10+'c'-'0'; 
      }else 
       numarray[j]=value; 
      j++; 
      counter++; 
     } 
     if ((c=getchar())==' ') {  
      i++; 
     } 
    } 
    return (counter); 
    printf("%c,%c:",counter,value); // for testing 
} 
+4

Arrrrgggghhhh! Indentez votre code correctement. – pmg

+0

Je suis désolé, je n'ai pas encore appris la bonne manière de mettre en retrait. Notre instructeur a dit qu'il nous enverrait une ligne directrice cette semaine. – pisfire

+1

Le code est trop désordonné pour repérer l'initialisation de 'j' ou il n'y a pas d'initialisation de' j'. En tout cas c'est mauvais. –

Répondre

7

c=s[i]!='\n' ne fait pas ce que vous pensez qu'il fait. L'opérateur d'inégalité a une priorité supérieure à celle de l'opérateur d'affectation. La variable c sera définie sur 1 si s[i] n'est pas égale à '\n' et sera mise à zéro si elle est égale.

Vous devez soit déplacer l'affectation vers une instruction précédente, soit placer des parenthèses autour de celle-ci.

+0

ok merci beaucoup – pisfire

1

Il y a quelques questions avec votre code (à part qu'il ne soit pas échancré correctement). Je vais les aborder comme je les vois. Je ne pense pas que vous voulez une boucle while dans votre boucle for. Vous parcourez déjà tous les caractères de la chaîne avec for. Peut-être que vous voulez vérifier chaque caractère contre 'n' et ' ', pour lequel vous utiliseriez simplement un if. À première vue, il semble que vous essayez de parcourir la chaîne deux fois, car vous avez deux boucles et i++ à deux endroits différents. Cela m'amène à croire que vous n'avez pas encore réfléchi à votre algorithme. Je pense que vous devriez vous asseoir et écrire un pseudocode. Liste étape par étape ce que vous voulez que votre fonction accomplisse en anglais et assurez-vous que cela a un sens logique, avant même d'écrire une ligne de code.

En outre, si vous return à partir d'une fonction, cette fonction arrêtera l'exécution. Donc, si vous voulez simplement ignorer l'exécution d'une itération d'une boucle, utilisez plutôt continue. En regardant votre code, je pense que vous pourriez avoir un return où vous voulez vraiment avoir un continue.

Pouvez-vous mettre en retrait votre code pour le rendre plus lisible et plus facile à suivre?

+0

+1 pour la dernière phrase en particulier – alex

+0

ok merci beaucoup – pisfire

2

Juste en regardant le code, il semble avoir un certain nombre de problèmes dans un certain nombre d'endroits. Au moins l'OMI, le premier (et probablement le plus gros) problème est qu'il devrait vraiment être divisé en un certain nombre de fonctions distinctes. Deuxièmement, le formatage est assez pauvre. Par exemple, l'indentation donne l'impression que certaines instructions sont contrôlées par un if qui ne l'est pas. Troisièmement, vous ne correspondez pas aux types, en passant un int et un double à printf, mais en utilisant la conversion% c (char) pour les deux.

Il y en a probablement plus, mais tant que vous ne les redressez pas (en particulier l'indentation), essayer d'en savoir plus est probablement une perte de temps.

+0

ok merci beaucoup beaucoup – pisfire

1

Je pense que vous devriez au moins essayer de lire http://www.acm.uiuc.edu/webmonkeys/book/c_guide/introduction.html ou quelque chose de similaire avant d'essayer de résoudre votre problème actuel. Il semble que vous n'ayez absolument aucune idée de ce que vous faites, après avoir au moins un peu compris C, la solution devrait être triviale.

+0

Ouais je suis d'accord. La première semaine de cours était "hello World" notre première mission de programmation que nous écrivons est supposée prendre n'importe quelle matrice carrée de 2x2 à 6x6 et cracher la réponse. Je ne sais pas comment je vais y arriver ou garder ma santé mentale. Je suis 16 heures sur cette mission et bien au-dessus de ma tête. La moitié des réponses que je reçois ici; Je ne sais même pas qu'ils veulent dire. – pisfire

Questions connexes