-1

テキスト ファイルから数値を読み込もうとしていますが、バイナリ ファイルを使用することはできません。これを行うために 2 つの方法を試しましたが、どちらも奇妙な結果を返します。

最初の方法:

    char *theNumber; 
    int i = 0;
    while(data>>text)
    {
        theNumber[i] = text;  
        i++;
    }

いくつかの奇妙なアクセント付き文字を返します。二番目

int theNumber;
while(data>>text)
{
     theNumber = text; // I tried theNumber<<text; as well
}

この結果を計算すると、テキスト ファイルに 123 が含まれていたときに大きな数値が返されます。


string filename;
    char text;
    int p; //first prime number
    int q; //second prime number
    unsigned long long toBeEncrypted; 

    cout<<"Enter name of file to encrypt: ";
    cin>>filename;
    ifstream data;
    ofstream encryptedData;
    encryptedData.open("RSA_cipher.txt");


    cout<<"Please enter two prime numbers:"<<endl;
    p = getPrime(1);
    q = getPrime(2);

    //doing stuff with file
    int theNumber;
    data >> theNumber;
    //int i = 0;
    /*while(data>>text)
    {
        theNumber[i] = text;  
        i++;
    }*/cout<<theNumber;

...//問題に関係のないその他のもの

4

3 に答える 3

1

このコード:

char *theNumber; 
int i = 0;
while(data>>text)
{
    theNumber[i] = text;  
    i++;
}

Has Undefined BehaviortheNumber[i] 、割り当てさえしていない配列へのアクセスに使用しているためです。あなたがしたはずです:

 char theNumber[255]; // Buffer size depends on the particular application
 int i = 0;
 while(data>>text)
 {
     theNumber[i] = text;  
     i++;
}

2 回目の試行:

theNumber = text;

定義方法によっては、機能する場合と機能しない場合がありますtext。これは の定義が分からないと答えられませんtext

とにかく、入力ストリームから数値を読み込みたい場合は、次のようにします。

int number;
data >> number;

アップデート:

最後に更新したコード スニペットでは、dataストリームが構築されますが、開かれません。どのファイルにも関連付けられていません。したがって、そのストリームから読み取ろうとしても成功せず、number(初期化されていない) には何も格納されません。

ifstream data;

// data is not associated to any file after construction...

int theNumber;
data >> theNumber;
于 2013-03-07T21:30:50.863 に答える
0

これはあなたの番号のためのストレージを作成しません。

char *theNumber; 

それはポインタです。アドレスを割り当てていないため、任意の場所を指します。

これを試して。

char theNumber[10];  // Whatever size you need. 

またはこれ。

int theNumber; 
于 2013-03-07T21:28:44.803 に答える
0

にメモリを割り当てていませんchar *theNumber;
ランダムな場所を指し、theNumberランダムな文字を印刷しています

于 2013-03-07T21:29:47.417 に答える