2015-05-02 80 views
0

我正在編寫一個程序,它需要一個文本文件和一個廣告活動的結果,並且需要爲4種不同的人口統計信息找到活動的平均評分。我想我已經明白,只是努力從文件中獲取數據並將其轉換爲char和int變量。我是否需要將它全部讀爲字符串,然後轉換或者可以將它們讀入這些變量中?需要幫助從文件中獲取char和int數據

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
using namespace std; 

int main(){ 
//declare vars 
ifstream fileIn; 
string path; 
string name; 
char yn; 
int age; 
double rating; 
double rate1 = 0; 
double rate1Count = 0; 
double avg1 = 0; 
double rate2 = 0; 
double rate2Count = 0; 
double avg2 = 0; 
double rate3 = 0; 
double rate3Count = 0; 
double avg3 = 0; 
double rate4 = 0; 
double rate4Count = 0; 
double avg4 = 0; 
double totalAvg = 0; 

cout << fixed << showpoint << setprecision(2); 

// prompt user 
cout << "Please enter a path to the text file with results: "; 

// get path 
cin >> path; 
cout << endl; 

// open a file for input 
fileIn.open(path); 

// error message for bad file 
if (!fileIn.is_open()){ 
    cout << "Unable to open file." << endl; 
    getchar(); 
    getchar(); 
    return 0; 
} 

// read and echo to screen 
cout << ifstream(path); 

// restore the file 
fileIn.clear(); 
fileIn.seekg(0); 
cout << endl << endl; 

// get average for demos 

while (!fileIn.eof){ 
    fileIn >> name; 
    fileIn >> yn; 
    fileIn >> age; 
    fileIn >> rating; 

    if (yn != 121 && age < 18){ 
     rate1 += rating; 
     rate1Count++; 
    } 
    if (yn == 121 && age < 18){ 
     rate2 += rating; 
     rate2Count++; 
    } 
    if (yn != 121 && age >= 18){ 
     rate3 += rating; 
     rate3Count++; 
    } 
    if (yn == 121 && age >= 18){ 
     rate4 += rating; 
     rate4Count++; 
    } 

} 

avg1 = rate1/rate1Count; 
avg2 = rate2/rate2Count; 
avg3 = rate3/rate3Count; 
avg4 = rate4/rate4Count; 

cout << yn << age << rating; 



// pause and exit 
getchar(); 
getchar(); 
return 0; 

}

文本文件

貝利ý16 68

哈里森Ñ17 71

格蘭特-Y 20 75

彼得森N 21 69

許-Y 20個79個

鮑爾斯ý15 75

安德森Ñ33 64

阮N 16 68

夏普N 14 75

瓊斯ý29 75

McMillan N 19 8

Gabriel N 20 62

+1

當你在這裏問一個問題時,你應該說出你觀察到了什麼具體問題......因爲你沒有告訴我們你的文件輸入的哪個方面不起作用,也就是說你有什麼問題觀察你設法閱讀的數據,無論是永久循環還是崩潰等等。 –

回答

1

cout << ifstream(path); ... fileIn.seekg(0); - 這一切都沒有幫助。

對於輸入,使用方法:

while (fileIn >> name >> yn >> age >> rating) 
{ 
    ... 

時,有一些問題獲取輸入這將退出 - 無論是由於該類型的無效字符(例如讀取數字時字母),或文件結束, 。

我是否需要將它全部讀爲字符串,然後轉換或可以將它們讀入這些變量?

如上,你並不需要,但你可以得到更好的爲用戶質量輸入驗證和錯誤消息,如果你每完成線作爲string然後試圖解析出的值:

std::string line; 
for (int line_num = 1; getline(fileIn, line); ++line_num) 
{ 
    std::istringstream iss(line); 
    if (iss >> name >> yn >> age >> rating >> std::ws && 
     iss.eof()) 
     ...use the values... 
    else 
     std::cerr << "bad input on line " << line_num 
      << " '" << line << "'\n"; 
     // could exit or throw if desired... 
} 
+1

併爲輸出使用'cout << yn <<「」<< age <<「」<< rating << std :: endl ;'所以你可以理解輸出。 –

+0

感謝您的回答!我應該提到它需要我在找到平均值之前先將該文件回顯到屏幕。做了一些像你所建議的變化,並仍然得到錯誤錯誤C2678:二進制'<<':沒有找到操作符需要類型'std :: ostream'的左側操作數(或沒有可接受的轉換) – Riley

+0

@Riley:我們不是介意讀者; -P ......報告錯誤的行上的代碼*是什麼? –