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;