[英]using getline gives error: no matching function for call to ‘getline(std::istream&, const string&)’
[英]error: no matching function for call to 'getline(FILE*&, std::string&)'
错误:没有匹配的函数调用'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 请工作。
我是巴西人。忽略变量的名称。 对不起我的英语。
您正在混淆 C 库的FILE *
函数和使用std::istream
C++ 库函数。
您需要重写代码并用std::ifstream
替换FILE *
所有用法,包括fopen()
等。
std::getline
的第一个参数是std::istream &
,而不是FILE *
。
我认为您混淆了 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
,因此您的选择已经做出。
thx 伙计们它现在编译。 我是这样写的:
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();
}
“barra”是因为我的 txt 有一个这种格式的日期:xx/xx/xxxx。现在我需要的是 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 伙计们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.