C 语言:在文本文件中搜索"word"并将值存储到 int 和 flout 类型变量中



例如,文本文件(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、藐视和二进制类型的变量?

换句话说,我想搜索文本文件以找到"var1",然后将下一行("var1的值"(保存到一个整数变量中,并重复此操作以搜索和存储"var2"的值到一个浮点变量中,"var3"到一个二进制变量中,依此类推

这是一个如何读写文件的示例://读取:

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

我已经修改了您的pogram,以便工作、检查并了解缺少了什么。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char cBuffer[256]={''};
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= %dn",var1);
break;
}
}

}

基本上添加了strncmp((以避免bcBuffer中出现新行,否则它将不相等,因此if((将不成立,这不是标准的编程方式,而是使其工作的粗略方式(此处无法解释所有内容(。

最后,我用这段代码找到了问题的解决方案(感谢其他答案(。代码搜索单词,并返回单词后的下一个值。

#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 = %dn",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 = %fn",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

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

最新更新