错误:没有匹配函数来调用'getline(FILE *&,std :: string&)' 功能代码:
void CarregarArquivo(){
aluno alunos_auxiliar[MAX];
FILE *arquivo;
arquivo=fopen ("texto.txt","r");
int quantidade=0;
fscanf(arquivo,"%d",&quantidade);
if(quantidade!=0){
quantusuario=quantidade;
for(int i=0;i<quantidade;i++){
getline(arquivo,alunos[i].nome);
fscanf(arquivo,"%d",&alunos[i].matricula);
printf("%d",alunos[i].matricula);
fscanf(arquivo,"%d/%d/%d",&alunos[i].nascimento.dia,&alunos[i].nascimento.mes,&alunos[i].nascimento.ano);
if(alunos[i].numero!=0){
for(int j=0;j<alunos[i].numero;j++){
getline(arquivo,alunos[i].materias[j].nome);
fscanf(arquivo,"%.1f",&alunos[i].materias[j].nota);
}
}
}
}
else if(quantidade == 0 && arquivo == NULL){
quantusuario =0;
}
fclose(arquivo);
}
包括:
registro.h在那里有结构:
struct aluno{
string nome;
int numero;
int matricula;
data nascimento;
disciplina materias[10];
};
包括:
#include"registros.h"
#define MAX 100
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include"funcoes.h"
#include <fstream>
#include<string>
Getline请工作。
我是巴西人。我知道变量的名称。抱歉我的英文。
答案 0 :(得分:1)
您正在混淆C库的FILE *
函数以及使用std::istream
的C ++库函数。
您需要重写代码并将FILE *
的所有用法(包括fopen()
等)替换为std::ifstream
。
std::getline
的第一个参数是std::istream &
,而不是FILE *
。
答案 1 :(得分:0)
我认为你混淆了C和C ++ API。在C ++中,这是函数:
http://www.cplusplus.com/reference/string/string/getline/
std::getline(std::istream&, std::string&)
而在C中,函数确实是
http://man7.org/linux/man-pages/man3/getline.3.html
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
选一个并坚持下去!如果选择C ++,则使用std::fstream
代替FILE*
,依此类推。请务必先添加std::
或使用using namespace std;
以避免错误。
所以它会这样开始:
std::ifstream arquivo("texto.txt");
int quantidade=0;
arquivo >> quantidade;
if(quantidade!=0){
quantusuario=quantidade;
for(int i=0;i<quantidade;i++){
std::getline(arquivo,alunos[i].nome);
arquivo >> alunos[i].matricula;
等等。请注意您已经使用std::string
的方式,因此您已经做出了选择。
答案 2 :(得分:0)
void CarregarArquivo(){
//FILE *arquivo;
//arquivo=fopen ("texto.txt","r");
int quantidade=0;
ifstream arquivo("texto.txt");
char barra=' ';
arquivo >> quantidade;
if(quantidade!=0){
quantusuario=quantidade;
for(int i=0;i<quantidade;i++){
getline(arquivo,alunos[i].nome);
cout << alunos[i].nome;
arquivo >> alunos[i].matricula;
arquivo >> alunos[i].nascimento.dia;
arquivo >> barra;
arquivo >> alunos[i].nascimento.mes;
arquivo >> barra;
arquivo >> alunos[i].nascimento.ano;
if(alunos[i].numero!=0){
for(int j=0;j<alunos[i].numero;j++){
getline(arquivo,alunos[i].materias[j].nome);
arquivo >> alunos[i].materias[j].nota;
}
}
}
}
else if(quantidade == 0 && arquivo == NULL){
quantusuario =0;
}
arquivo.close();
}
&#34;巴拉&#34;是因为我的txt有这种格式的日期:xx / xx / xxxx.now我需要的是Getline工作正常。 :(。它还没有工作。 我的txt就是这样:
2
Thiago
12312
21/12/1995
Math
10.0
Scott
31233
12/12/1995
首先是需要阅读的人数。接下来是注册和出生日期.cout bellow getline仅用于测试,而printf nothing.iksemyonov我使用命名空间std。 编辑: 问题来自于.txt,thx guys
的形成