C语言:在文本文件中搜索“单词”,并将值存储到int和flout类型变量中

时间:2018-12-12 10:21:55

标签: c scanf fgets

例如,文本文件(vars.txt)包含:

var1
10
var2
3.54
var3
10110

我想读取文本文件,并将var1的值(这是文本文件中var1之后的下一行)存储到程序中的变量中。 我有以下代码,但似乎无法正常工作:

char cBuffer[256];
FILE *pSrcFile;
pSrcFile = fopen("vars.txt","r");
while( (fgets( cBuffer, 256 , pSrcFile)) != NULL )
{
    if( strcmp( cBuffer, "var1" ) != NULL )
    {
        sscanf( pSrcFile, "%d" , &var1 );
        printf("var1 is found= %d",var1);
        break;
    }
}

如何将文本文件的字符串转换并保存为int,flut和二进制类型变量?

换句话说,我想搜索文本文件以找到“ var1”,然后将下一行(“ var1”的值)保存到整数变量,然后重复此操作以搜索和存储“ var2”的值转换为float变量,将“ var3”转换为二进制变量,依此类推。

3 个答案:

答案 0 :(得分:0)

这是如何读取和写入文件的示例: //阅读:

FILE *f1, *f2;
f1 = fopen("IN.INP","r");
fscanf(f1,"%d",&vars);    
fclose(f1);
//Write:
f2 = fopen("OUT.OUT", "w");
fprintf(f2, "%d",vars);
fclose(f2);

我不确定是否正确理解您的“如何将.txt转换为int,float,二进制类型vars”的问题。但是,方法如下:

char a = 10;
int b = (int) a;

但是,如果您只想将.txt的值读入int,则使用float即可使用 fscanf(f1,“%d”,&vars); // d为int

答案 1 :(得分:0)

我已修改您的图表以使其正常工作,检查并了解缺少的内容。

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

int main()
{

 char cBuffer[256]={'\0'};
 FILE *pSrcFile;

 pSrcFile = fopen("vars.txt","r");
 int var1;
 while((fgets(cBuffer, 256 , pSrcFile)) != NULL )
 {
    if(strncmp(cBuffer, "var1", sizeof("var1")-1 ) == 0 )
     {
       fscanf(pSrcFile, "%d" , &var1 );
       printf("var1 is found= %d\n",var1);
       break;
     }
  }

}

基本上添加了strncmp()来避免bcBuffer中有换行,否则将不相等,因此if()不会为真,这不是标准的编程方式,而是使它工作的粗略方式(所有人可以在这里解释)。

答案 2 :(得分:0)

最后,我找到了使用此代码的问题的解决方案(由于其他答案)。该代码搜索 单词 ,并在单词之后返回下一个 value

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

int search_word_int( char *word , FILE *file , int *step )
{
    fseek(file, 0, SEEK_SET);
    char dummy[strlen(word)+1];
    int step_ = step;
    int variable = 0;
    while((fgets(dummy, strlen(word)+1 , file)) != NULL )
    {
        if(strncmp(dummy, word, strlen(word)+1 ) == 0 )
        {
            for (int i = 0 ; i < step_ + 1 ; i++)
                fscanf(file, "%d" , &variable );
            printf("%s = %d\n",word,variable);
            break;
        }
    }
    return(variable);
}

float   search_word_float( char *word , FILE *file , int *step )
{
    fseek(file, 0, SEEK_SET);
    char dummy[strlen(word)+1];
    int     step_ = step;
    float   variable = 0;
    while( (fgets( dummy , strlen(word)+1 , file )) != NULL )
    {
        if( strncmp(dummy, word, strlen(word)+1 ) == 0 )
        {
            for (int i = 0 ; i < step_ + 1 ; i++)
                fscanf( file , "%f" , &variable );
            printf("%s = %f\n",word,variable);
            break;
        }
    }
    return(variable);
}

int main()
{
    FILE    *file;
    file = fopen("vars.txt","r");
    int var1 = search_word_int( "var1" , file , 1 );
    float var2 = search_word_float( "var2" , file , 2 );
    fclose(file);
    return(0);
}

如果文本文件(“ vars.txt”)为:

var1
10
var2     2.3
4.5

那么结果是:

var1 = 10
var2 = 4.5

空格,换行和制表符都将被忽略。