A linguagem C e o mfc leem os dados do arquivo de acordo com o formato

A função da função fscanf() é ler um ou mais dados em um formato de um arquivo;

Por exemplo, há uma linha de dados no arquivo,

22 3,34 olá

Em seguida, use fscanf(fp, "%d%f%s", &a, &f, str) para ler dados inteiros, de ponto flutuante e de string de uma só vez;

Esta função está localizada no arquivo de cabeçalho da biblioteca padrão C <stdio.h>;

Exemplo;

Os arquivos de teste são os seguintes;

código; 

void CFiletest1View::OnDraw(CDC* pDC)
{
	CFiletest1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int a = 0;
	float f = 0;
	char str[100] = "";
	CString str1;
	int d=0;
	float f2=0;
 
	FILE* fp = fopen("test1.txt", "r");
	for(int i=0; i<3; i++)
	{
        fscanf(fp, "%d%f%s", &a, &f, str);
		str1.Format("%d,%f,%s", a, f, str);
		pDC->TextOut(50, 50 + i*20, str1);
		d += a;    
		f2 += f;
    }
	str1.Format("整数和:%d", d);
	pDC->TextOut(50, 115, str1);
	str1.Format("浮点数和:%f", f2);
	pDC->TextOut(50, 135, str1);
	fclose(fp);
}

Execute da seguinte forma; 

A classe CStdioFile é frequentemente usada no MFC; ainda posso usar a função fscanf()?

Primeiro, dê uma olhada: depois de usar a classe CStdioFile para abrir um arquivo, o tipo BOOL é retornado e fscanf requer um tipo FILE*; se o arquivo for aberto com a função de biblioteca padrão C fopen, o tipo FILE* é retornado;

Verifique a documentação do MFC;

A classe CStdioFile possui um membro m_pStream,

CStdioFile::m_pStream
    O membro de dados m_pStream é um ponteiro para um arquivo aberto retornado pela função de tempo de execução C fopen. É NULL se o arquivo nunca foi aberto ou foi fechado. 

De acordo com a documentação, este m_pStream é o valor de retorno da função da biblioteca padrão C fopen após a abertura do arquivo;

Em seguida, altere-o para o código a seguir e dê uma olhada;

void CFiletest1View::OnDraw(CDC* pDC)
{
	CFiletest1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	int a = 0;
	float f = 0;
	char str[100] = "";
	CString str1;
	int d=0;
	float f2=0;
 
	CStdioFile file;
	file.Open("test1.txt", CFile::modeRead);

	for(int i=0; i<3; i++)
	{
      
      //根据字符类型读取txt文件中的数据
		fscanf(file.m_pStream, "%d%f%s", &a, &f, str);
		str1.Format("%d,%f,%s", a, f, str);
		pDC->TextOut(50, 50 + i*20, str1);
		d += a;    
		f2 += f;
    }
	str1.Format("整数和:%d", d);
	pDC->TextOut(50, 115, str1);
	str1.Format("浮点数和:%f", f2);
	pDC->TextOut(50, 135, str1);
	file.Close();
}

Execute-o, sem problemas, mesmo;

Acho que você gosta

Origin blog.csdn.net/bcbobo21cn/article/details/132932753
Recomendado
Clasificación