2014-04-06 109 views
1

我想写一个程序,它将从文本文件中读取并使用结构存储文本文件中的内容,并重新组合并打印出文本文件中的信息。但我遇到了getline的问题。我试图写getline像这样从'int'到'char *'的无效转换

getline(infile, info.name) 

但它不起作用。我还包括<string><cstring>但我还是会遇到这样的错误

错误C2664:“的std :: basic_istream < _Elem,_Traits> &的std :: basic_istream < _Elem,_Traits> ::函数getline(_Elem *的std :: streamsize可):诠释 ' 不能转换参数1 '' 到 '字符*'

错误C2664:' 的std :: basic_istream < _Elem,_Traits> & std :: basic_istream < _Elem,_Traits> :: getline(_Elem *,std :: streamsize,_Elem)':无法将参数1从'char [10] [80]'转换为'char *”

,我想打印出的文本文件是下面的文字

伊莎贝拉陈
新加坡共和国
的天秤座23 - 10 - 1993年我希望是好的在C++
我希望 christina gri mmie会赢得声音
我希望......

对不起,noob问题,并提前致谢!

#include <iomanip> 
    #include <iostream> 
    #include <cstdlib> 
    #include <ctime> 
    #include <cctype> 
    #include <fstream> 
    #include <string> 

    using namespace std; 

    const int MAX = 80; 
    const int MAXNO = 10; 
    enum Zodiac 
    { 
      Aquarius, Pisces, Aries, Taurus, 
      Gemini, Cancer, Leo, Virgo, 
      Libra, Scorpio, Sagittarius, Capricorn 
    }; 
    struct Date 
    { 
     Zodiac sign; 
     int day; 
     int month; 
     int year; 
    }; 
    struct Student 
    { 
      char name [MAX]; 
     char nationality [MAX]; 
     Date birthDate; 
     int no; // no of other messages 
     char wishMessage [MAXNO][MAX]; 
     // Feel free to add in more features 
    }; 

    void myInfo (fstream&, char [], Student&); 
    // The above function reads information from the text file 
    // and store the information in a structure reference parameter 

    void printOut(Student); 

    int main() 
    { 
     fstream infile; 
     char fName[MAX]; 
     Student info; 
     cout << "Enter your info file name: " 
     cin >> fName; 
     cout << endl; 

     myInfo(infile, fName, info); 
     printOut(info); 

    } 

    void myInfo (fstream& infile, char fName[], Student& info) 
    { 
      infile.open(fName, ios::in); 

     if(!infile) 
     { 
      cout << "Error file not found!" << endl; 
      exit(0); 
     } 
     infile.getline(info.name, MAX); 
     infile.getline(info.nationality,MAX); 
     infile << info.birthDate.sign 
      << info.birthDate.day 
      << info.birthDate.month 
      << info.birthDate.year; 
     infile.getline(info.no, MAX); 
     infile.getline(info.wishMessage, MAXNO, MAX); 

     infile.close(); 
     cout << "Successfully readed!" << endl; 

    } 

    void printOut(Student info) 
    { 
     cout << "My name is " << info.name << endl; 
     cout << "My nationality is " << info.nationality << endl; 
     cout << "My date of birth is " << info.birthDate.day 
      << " " << info.birthDate.month << " " 
     << info.birthDate.year << endl; 
     cout << "I am " << info.birthDate.sign << endl; 
     cout << "\n I have " << info.no << " wishes:" << endl; 

    } 
+0

'getline'读取字符串,而不是整数。 – chris

回答

0

看来你正试图读取到非字符串与函数getline,而它读成字符串按documentation。从流中为C-串格式化输入,并将它们存储到s中

提取字符,直到所提取的字符是定界符,或者n个字符已被写入为s(包括终止空字符) 。

这里有两个问题的行:

infile.getline(info.no, MAX); 

infile.getline(info.wishMessage, MAXNO, MAX); 

前者读入int,则后者是成一个字符串数组。

您需要先读入字符串,然后根据需要进行相应的转换操作。

+0

非常感谢! :d –