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.
S'il vous plaît donner à l'entrée de test, le rendement attendu sortie et la sortie réelle. – kaylum
J'ai déjà ajouté l'entrée et la sortie ... –
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