2014-04-09 183 views
1

輸入文件包含要放入數組的14個狀態首字母(TN,CA,NB,FL等)。下面的代碼清除了編譯器,但是當我告訴程序文件名時,它會發出一堆空格,其中包含一些模糊的空格,第三個空格包含'@'符號。我認爲問題是與我的功能不完全確定什麼具體雖然任何幫助非常感謝!將數據從輸入文件讀取到數組時出錯

輸入文件設置了狀態縮寫爲一個在另一個的頂部:

TN PA KY MN CA 等

void readstate(ifstream& input, string []); 
int main() 
{ 
    string stateInitials[14]; 
    char filename[256]; 
    ifstream input; 

    cout << "Enter file name: "; 
    cin >> filename; 

    input.open(filename); 

    if (input.fail()) 
    { 
     cout << " file open fail" << endl; 
    } 
    readstate (input, stateInitials); 

    input.close(); 

    return (0); 
} 

void readstate (ifstream& input, string stateInitials[]) 
{ 
    int count; 

    for (count = 0; count <= MAX_ENTRIES; count++) 
    { 
     input >> stateInitials[count]; 
     cout << stateInitials[count] << endl; 
    } 
} 
+0

有問題的閱讀數據以及嘗試使用getline()。更具體地說,getline(input,stateInitials),並且我從void *到char *得到無效的反轉錯誤,並且無法將char *轉換爲size_t *。不確定老師的'*'是什麼都沒有討論過。 – user3317020

+0

你的輸入文件格式化到底如何?每個首字母是一行嗎?所有的初始聚集在一起,沒有空格?逗號分隔?製表符分隔? – merlin2011

+0

好吧,我得到了程序來讀取文件中的字符。但是例如打印出'KY'的情況下,我在一行上得到'K',在它下面的'Y'上得到'Y'。該文件與bot字符一起設置在一起。一長列。 – user3317020

回答

0

您正在治療的字符陣列,就好像它是一個字符串數組。 雖然你可以將字符串放在相同的char數組中,但這不是標準的方式。以下是您的代碼的修改版本,它會創建一個char[]來保存每個首字母。

#include <iostream> 
#include <fstream> 
#include <string> 
#include <stdlib.h> 
#include <string.h> 



#define MAX_ENTRIES 14 

using namespace std; 
void readstate(ifstream& input, char* []); 
int main() 
{ 
    char** stateInitials = new char*[14]; 
    char filename[256]; 
    ifstream input; 

    cout << "Enter file name: "; 
    cin >> filename; 

    input.open(filename); 

    if (input.fail()) 
    { 
     cout << " file open fail" << endl; 
    } 
    readstate (input, stateInitials); 

    // After you are done, you should clean up 
    for (int i = 0; i <= MAX_ENTRIES; i++) delete stateInitials[i]; 
    delete stateInitials; 
    return (0); 
} 

void readstate (ifstream& input, char* stateInitials[]) 
{ 
    int count; 

    string temp_buf; 
    for (count = 0; count <= MAX_ENTRIES; count++) 
    { 
     stateInitials[count] = new char[3]; 

     input >> temp_buf; 
     memcpy(stateInitials[count], temp_buf.c_str(), 3); 
     cout << stateInitials[count] << endl; 
    } 
} 
相關問題