使用文件在c编程中为变量赋值

时间:2014-07-21 01:48:22

标签: c fgets scanf

我想从单个.txt文件中读取多个变量。

例如,以下代码将值分配给Txx,ST,mu,R0,DC和NB。

void main() {

    int Txx = 10;                       
    double ST = 0.07;                       
    double mu = 0.02;                       

    double R0 = 10e-6;                      
    double DC = 40e-6;                      
    int NB = 5;                     

}

相反,有没有办法使用单个文本文件分配这些值,如下所示:


Txx = 10;                       
ST = 0.07;                      
mu = 0.02;                      
R0 = 10e-6;                     
DC = 40e-6;                     
NB = 5; 

这可能是一个常见问题。如果你重定向我的解决方案。这将非常有帮助。

谢谢。

3 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <string.h>

enum Type { INT, DOUBLE };

struct var {
    char *name;
    void *pointer;
    enum Type type;
};

int search(struct var *vars, const char *name){
    int i;
    for(i=0; vars[i].name ; ++i){
        if(strcmp(vars[i].name, name)==0)
            return i;
    }
    return -1;//not found
}

int main(void){
    int Txx, NB;
    double ST, mu, R0, DC;
    struct var vars[] = {
        {"Txx", &Txx, INT},
        {"NB", &NB, INT},
        {"ST", &ST, DOUBLE},
        {"mu", &mu, DOUBLE},
        {"R0", &R0, DOUBLE},
        {"DC", &DC, DOUBLE},
        {NULL, NULL, 0}
    };
    FILE *fp = fopen("data.txt", "r");
    char buff[128];
    int i;

    while(1==fscanf(fp, "%s", buff)){
        if(-1!=(i=search(vars, buff))){
            if(vars[i].type == INT)
                fscanf(fp, " %*c %d;", (int*)vars[i].pointer);
            else if(vars[i].type == DOUBLE)
                fscanf(fp, " %*c %lf;", (double*)vars[i].pointer);
        }
    }
    fclose(fp);
    printf("Txx = %d\n", Txx);
    printf("ST  = %f\n", ST);
    printf("mu  = %f\n", mu);
    printf("R0  = %e\n", R0);
    printf("DC  = %e\n", DC);
    printf("NB  = %d\n", NB);
    return 0;
}

答案 1 :(得分:0)

原油,但有效:

#include <stdio.h>
#include <string.h>

int main()
{
  int Txx, NB;
  float ST, mu, R0, DC;

  FILE *fp = fopen("single.txt", "r");

  char varname[60];
  char c;

  while(fscanf(fp, "%s %c", varname, &c) != EOF)
    {
      if(strcmp(varname, "Txx")==0)
        fscanf(fp, "%d%c", &Txx, &c);
      if(strcmp(varname, "ST")==0)
        fscanf(fp, "%f%c", &ST, &c);
      if(strcmp(varname, "mu")==0)
        fscanf(fp, "%f%c", &mu, &c);
      if(strcmp(varname, "R0")==0)
        fscanf(fp, "%f%c", &R0, &c);
      if(strcmp(varname, "DC")==0)
        fscanf(fp, "%f%c", &DC, &c);
      if(strcmp(varname, "NB")==0)
        fscanf(fp, "%d%c", &NB, &c);
    }

  printf("Txx %d\n", Txx);
  printf("ST %f\n", ST);
  printf("mu %f\n", mu);
  printf("R0 %f\n", R0);
  printf("DC %f\n", DC);
  printf("NB %d\n", NB);
  return(0);
}

答案 2 :(得分:-3)

您可以做的一件事是使用文件流加载文本文件并解析该文件中的文本 正如大多数人所说的,如果你正在寻找什么是json以及如何在开始使用之前验证它,那么使用Json会是一个非常好的主意:

并以json创建上面的列表,你只需要这样做:

{
  "Txx" : 10,                       
  "ST" : 0.07,                      
  "mu" : 0.02,                      
  "R0" : 10e-6,                     
  "DC" : 40e-6,                     
  "NB" : 5 
}

[http://json.parser.online.fr/][1]

这将验证您的Json文件。