2016-12-05 1 views
0

J'ai rencontré un roadblock complet sur ce sujet, je ne suis pas tout à fait bon avec les pointeurs et la gestion de fichiers atm et uni. a été trop vite que je ne peux pas suivre ...Problèmes avec un programme qui décode la résistance par couleur en C

entrée prévue à partir du fichier est une des couleurs du tableau:
INPUT.TXT
rouge, vert, bleu
noir, blanc, gris
...

qui délivre ensuite un fichier:
sortie.txt
rouge, vert, bleu
Résistance en ohms: 7000000,000000

noir, blanc, gris
Résistance en ohms: 1.000.000,000000
...

ma sortie en ce moment:
rouge, vert, bleu
Résistance en ohms: 0,000000

noir, blanc, gris
Résistance en ohms: 0,000000

jusqu'à présent voici mon code:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<math.h> 
#define size 100 

double DecodeString(char *inputString){ 
    const char *kColorTable[10] = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "gray", "white"}; 
    int i; 

    for(i=0; i<10; i++){ 
    if(strcmp(inputString, kColorTable[i]) == 0){ 
     return (double)i; 
    } 
    } 
    return -999.0; 
} 

int main(){ 
    char color[size], *token, *inputString; 
    double resistance, color1, color2, color3; 
    double value; 


    FILE *fptrin, *fptrout; 
    if(((fptrin = fopen("input.txt", "r"))==NULL) || ((fptrout = fopen("output.txt", "w")) == NULL)){ 
    printf("Error 404: File not found"); 
    exit(1); 
    } 

    while(fgets(color, size, fptrin)){ 
    token = strtok(color, ","); 
    DecodeString(token); 
    puts(""); 
    while(token != NULL){ 
     value = DecodeString(token); 
     printf("%s",token); 
     token = strtok(NULL, ","); 
    } 
    } 
    //value = DecodeString(color); 

    if (color1 == -999.0 || color2 == -999.0 || color3 == -999.0){ 
    printf("\n\nBad code -- cannot compute resistance\n"); 
    } 

    else{ 
    resistance = (10.0 * color1 + color2) *pow(10.0, color3); 

    if(resistance > 1000){ 
     printf("\n\nResistance in Kilo-ohms: %f\n",resistance); 
    } 
    else{ 
     printf("\n\nResistance in ohms: %f\n",resistance); 
    } 
    } 

    fclose(fptrin); 
    fclose(fptrout); 

    getchar(); 
    return 0; 
} 

Je suis coincé sur ma boucle strtok, je ne suis pas tout à fait sûr de savoir comment passer ces valeurs dans la fonction et l'attribution des valeurs de la fonction à color1, color2, color3 à utiliser pour calculer les ohms.

Je ne comprends pas quand je passe token-DecodeString il ne retourne que la valeur de la première chaîne et non chaque corde (peut-être que je manque une boucle)

J'ai un autre code où je me suis basé mon code hors de la fonction de quelqu'un:

#include<stdio.h> 
#include<stdlib.h> 
#include<strings.h> 
#include<math.h> 
#define size 100 

double DecodeString(char *inputString) 
{ 
    const char *kColorTable[11] = 
    {"", "black", "brown", "red", "orange", "yellow", 
     "green", "blue", "violet", "gray", "white"}; 
    int i; 

    for(i=0; i<11; i++) 
    { 
     if(strcmp(inputString, kColorTable[i]) == 0) 
     { 
      return (double)i; 
     } 
    } 
    return -999.0; 

} 

int main(void){ 
    char color[size], *token, *inputString; 
    double value; 

    FILE *fptrin, *fptrout; 
    if(((fptrin = fopen("input.txt", "r")) == NULL) || ((fptrout = fopen("output.txt", "w")) == NULL)){ 
    printf("Error 404: File not found"); 
    exit(1); 
    } 

    while(fgets(color, size, fptrin)){ 
    token = strtok(color, ","); 
    DecodeString(token); 
    puts(""); 
    while(token != NULL){ 
     value = DecodeString(token); 
     printf("%s",token); 
     token = strtok(NULL, ","); 
    } 
    //value = DecodeString(token); 
    printf("%f\n",value + value) *pow(10.0, value); 
    } 
    return 0; 
} 

J'ai frappé un barrage routier sérieux et apprécierait des explications et des exemples pour mieux comprendre ce qui se passe.

+1

S'il vous plaît donner à l'entrée de test, le rendement attendu sortie et la sortie réelle. – kaylum

+0

J'ai déjà ajouté l'entrée et la sortie ... –

+0

Si l'entrée contient des espaces ainsi que des virgules que vous voulez utiliser comme séparateurs, alors vous devriez inclure un espace dans la seconde [strtok] (http: // www. cplusplus.com/reference/cstring/strtok/) Paramètre par exemple: 'token = strtok (couleur,", ");' – samgak

Répondre

1

logique suivante va travailler pour vous,

matrice double 1.Declare

double colord[3];

2.Now while modifier,

while(fgets(color, size, fptrin)){ 
    token = strtok(color, ","); 
    colord[i] = DecodeString(token); 
    puts(""); 
    while(token != NULL){ 
     i++; 
     colord[i] = DecodeString(token); 
     printf("%s",token); 
     token = strtok(NULL, ","); 
    } 
} 
if (colord[0] == -999.0 || colord[1] == -999.0 || colord[2] == -999.0){ 
    printf("\n\nBad code -- cannot compute resistance\n"); 
} 
else{ 
    resistance = (10.0 * colord[0] + colord[1]) * pow(10.0, colord[2]); 
+0

Merci! Cela fonctionne pour moi! Je ne peux pas croire que je n'ai pas pensé à la couleur en tant que tableau! Uni. se déplace trop vite je ne peux presque pas suivre! Je vais continuer à pratiquer et à apprendre! –