例如,文本文件(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”转换为二进制变量,依此类推。
答案 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
空格,换行和制表符都将被忽略。