2009-08-31 5 views
3

私は心が失われているかどうか疑問に思っていますが、私はあなたに誓っています。このコードはスマイルな顔を.name値として出力します!!世界で何が起こっているのですか?これまでのところ、値が1の場合にのみ動作するように見えますが、それ以外のものは正しくエラーを出します。structプロパティに不適切な値の型を割り当てると面白い顔をしています!

私はコードに欠陥があることを認識しています - >これは助けが必要ありません。

#include <iostream> 
#include <fstream> 
#include <regex> 
#include <string> 
#include <list> 

using namespace std; 
using namespace tr1; 


struct CollectedData 
{ 
public: 
    string name; 
    float grade; 

}; 

int main() 
{ 
    string line; 
    list<CollectedData> AllData; 
    int count; 

    ifstream myFile("test_data.txt"); 
    if (myFile.fail()) {cout << "Error opening file"; return 0;} 
    else 
    { 
     cout << "File opened... \n"; 
     while(getline(myFile, line)) { 
      CollectedData lineData; 
      lineData.name = 1; 
      lineData.grade = 2; 
      AllData.push_back(lineData); 
     } 
    } 

    cout << "\n\n File contents: \n"; 

    list<CollectedData>::iterator Iterator; 
    for(Iterator = AllData.begin(); 
      Iterator != AllData.end(); 
      Iterator++) 
    { 
     cout << "\t" << (*Iterator).name << " - "; 
     cout << "\t" << (*Iterator).grade << "\n"; 
    } 


    getchar(); 
    return 1; 
} 

:-) http://img21.imageshack.us/img21/4600/capturekjc.jpg

私はCODEは無用であることを知っている
は、私はそれがSMILEYではなく、エラー

慰めの顔MEを与えている理由を知りたいです。 。 。

+4

そのスマイリーは0x01の文字です。 – LiraNuna

+5

+1、それ以上の状況と小さな怒りが私を笑わせてくれました。 – Corey

+0

コードテーブル:http://en.wikipedia.org/wiki/Code_page_437#Characters – mark4o

答えて

8

笑顔はASCII値1の文字です。理由は分かりませんが、明らかにコンパイラが文字として扱うことにしたので、あなたはスマイリーを取得します。

+2

スマイリーフェイスはASCII文字ではありません。 IBM-PC(MS-DOSコードページ437)に設定されています。 – mark4o

6

あなたの問題をあざけることはここにある:

lineData.name = 1; 
lineData.grade = 2; 

私はあなたが取得しているシンボルがASCII 1であることに注意すべきである(すなわち、正確にあなたはlineData.nameに設定しているもの)。

while(getline(myFile, line))

あなたはlineData.nameに適切な文字列を挿入し、lineData.gradeに整数を挿入し、ラインを取り、それを解析する必要があります。

+0

ヌル終了とは関係ありません。 –

+0

私は「顔」から複数のものがあると仮定しました。質問を読み返すと悪い仮定になるので、答えを編集したようです。 –

+0

また、私が投稿したとき、私は画像をブロックしていたプロキシの後ろにいました。だから、私は持っていた情報を使ってやりました。 –

3

文字列に文字値(1)が割り当てられています。文字値は、ASCII文字セットのスマイリーフェイスになります。

9

私はデータ型がstringで、CHAR 0x01は笑顔の顔をプリントしているのでME SMILEYではなく、エラー

の顔与えている理由を知りたいです。場合によっては値0x31を代入することになります。文字は1で、ASCII形式です。他の人のように

+7

また、文字 "1"を書く移植可能な方法である値 "1" – MSalters

2

が言った名前は、文字列型であるので、それに文字列を割り当てることが最善のようになります。

lineData.name = "1"; 

引用符は、コンパイラは、この値が文字列であることを知っている、とあなたでしょうスマイリーフェイスの取得を停止します。

と言った...

クールスト。バグ。これまで

関連する問題