C语言中的文件句柄操作和枚举函数

C语言中的文件句柄操作和枚举函数,c,C,我目前的任务是为读取文件的电阻解码器编写代码 具体来说,我的代码必须从一个文件输入中读取,该文件输入有三个色带,色带之间用彗差隔开: input.txt 红色、绿色、蓝色 黑色、橙色、黄色 然后,它必须用每种颜色的一组值来解码这些颜色,从0一直到9 最后,它必须计算每种颜色加起来的电阻乘以10^n 例如,如果第一个频带为红色,第二个频带为绿色,第三个频带为蓝色,则电阻器的值为50×103欧姆 编辑:这是我现在的代码,我仍然不知道如何将值从strtok传递到函数,我对指针不是很在行,这让我很困惑,

我目前的任务是为读取文件的电阻解码器编写代码

具体来说,我的代码必须从一个文件输入中读取,该文件输入有三个色带,色带之间用彗差隔开: input.txt

红色、绿色、蓝色
黑色、橙色、黄色

然后,它必须用每种颜色的一组值来解码这些颜色,从0一直到9

最后,它必须计算每种颜色加起来的电阻乘以10^n

例如,如果第一个频带为红色,第二个频带为绿色,第三个频带为蓝色,则电阻器的值为50×103欧姆

编辑:这是我现在的代码,我仍然不知道如何将值从strtok传递到函数,我对指针不是很在行,这让我很困惑,还有文件处理,所以我真的不知道我的循环中发生了什么(事实上,她给我们的是我的prof的循环代码)自从上大学以来,我几乎没有在这些问题上做过任何练习。动作太快了,所以我没有太多的经验

关于我的strtok循环以及如何将其值传递给函数的解释将是很好的,一些更好地理解它的示例将是非常好的

#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 code;
  char color[size], *token, code1, code2, code3, *inputString;
  double resistance, color1, color2, color3;
  double value = DecodeString(inputString);


  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 - 1, fptrin)){
    token = strtok(color, ",");
    puts("");
    while(token != NULL){
      printf("%s",token);
      token = strtok(NULL, ",");
      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;
}
#包括
#包括
#包括
#包括
#定义大小100
双解码字符串(字符*输入字符串){
常量字符*kColorTable[10]={
“黑色”、“棕色”、“红色”、“橙色”、“黄色”,
“绿色”、“蓝色”、“紫色”、“灰色”、“白色”
};
int i;
对于(i=0;i 1000){
printf(“\n\n以千欧姆为单位的电阻:%f\n”,电阻);
}
否则{
printf(“\n\n电阻,单位为欧姆:%f\n”,电阻);
}
}
fclose(fptrin);
fclose(fptrout);
getchar();
返回0;
}

我一直在根据你给我的函数进行一些练习和测试,但我仍然不太明白如何使事情正常进行。我在这里遇到了完全的障碍,我不确定下一步该怎么办:/

#include<stdio.h>
#include<stdlib.h>
#include<strings.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(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 - 1, fptrin)){
    token = strtok(color, ",");
    DecodeString(color);
    puts("");
    while(token != NULL){
      printf("%s",token);
      token = strtok(NULL, ",");
    }
    //printf("color value: ");
    printf("%f\n", value);
  }
    return 0;
}
#包括
#包括
#包括
#定义大小100
双解码字符串(字符*输入字符串)
{
常量字符*kColorTable[10]=
{“黑色”、“棕色”、“红色”、“橙色”、“黄色”,
“绿色”、“蓝色”、“紫色”、“灰色”、“白色”};
int i;

对于(i=0;i我包含了一个迷你函数,它接受一个字符串并为您将其解析为一个双精度值。这是您缺少的逻辑的一部分。其余的,我留给您

#include <strings.h>

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(stricmp(inputString, kColorTable[i]) == 0)
         {
             return (double)i;
         }
     }

     return -999.0;
}

int main(void)
{
    double value = DecodeString("blue");
    printf("%f\n", value );
    return 0;
}
#包括
双解码字符串(字符*输入字符串)
{
常量字符*kColorTable[10]=
{“黑色”、“棕色”、“红色”、“橙色”、“黄色”,
“绿色”、“蓝色”、“紫色”、“灰色”、“白色”};
int i;

对于(i=0;i我包含了一个迷你函数,它接受一个字符串并为您将其解析为一个双精度值。这是您缺少的逻辑的一部分。其余的,我留给您

#include <strings.h>

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(stricmp(inputString, kColorTable[i]) == 0)
         {
             return (double)i;
         }
     }

     return -999.0;
}

int main(void)
{
    double value = DecodeString("blue");
    printf("%f\n", value );
    return 0;
}
#包括
双解码字符串(字符*输入字符串)
{
常量字符*kColorTable[10]=
{“黑色”、“棕色”、“红色”、“橙色”、“黄色”,
“绿色”、“蓝色”、“紫色”、“灰色”、“白色”};
int i;

对于(i=0;IU应该查看或学习如何)。需要代码将从Strtok循环传入的字符串转换为0到9的值。现在“代码>代码< /代码>未被使用。考虑设置一个字符串名称表并按顺序对每个字符串进行比较。将字符串排列起来,这样表中的位置就是它们的值。然后,当您在可能的字符串中循环时,循环的索引将是数学所需的整数值。除了前面的注释外,您还比较了
fgets
(返回指向字符的指针)的返回值使用
EOF
,它是一个int。我认为您需要将其与
NULL
进行比较。此外,
fgets
不使用“%s”之类的格式说明符。可能您的意思是使用
sscanf
。如果您的意思是使用
fgets
,则其第二个参数是指定输入缓冲区大小的
int
,而不是字符串。此外,您对不存在的输入文件的检查也不起作用。如果((fptrin=fopen(“input.txt”,“r”)==NULL)|((fptrout=fopen)(“output.txt”,“w”)==NULL){ <代码> >您应该查看或学习如何使用。您需要代码将从Strtok循环传入的字符串转换为0到9的值。现在“代码>代码< /代码>未被使用。考虑设置一个字符串名称表并按顺序对每个字符串进行比较。将字符串排列起来,这样表中的位置就是它们的值。然后,当您在可能的字符串中循环时,循环的索引将是数学所需的整数值。除了前面的注释外,您还比较了
fgets
(返回指向字符的指针)的返回值使用
EOF
,它是一个int。我认为您需要比较它,它将改为
NULL
。此外,
fgets
不使用像“%s”这样的格式说明符“。也许您想使用
sscanf
。如果您想使用
fgets
,它的第二个参数是指定输入缓冲区大小的
int
,而不是字符串。此外,您对不存在的输入文件的检查也不起作用。如果((fptrin=fopen(“input.txt”,“r”)==NULL)|((fptrout=fopen)(“output.txt”,“w”)==NULL){
我对代码进行了一些编辑,以便正确地读取strok循环的文件,但我仍然不确定如何将其值传递给函数并返回,对指针atm和uni没有太多经验。速度太快,我无法跟上。了解我的strok循环,以及它现在是如何工作的,还有一些示例可以帮助我tter理解太好了!
strtok
是一个相当复杂的软件。它根据作为第二个参数传递的“令牌”字符串将字符串拆分为子字符串。如果将NULL传递给第一个参数,它将继续拆分传入的最后一个字符串。基本上,您的外观是通过字符串进行处理,在每个c上将其拆分