尝试从文件中读取数字时获取奇怪的数字

时间:2013-03-07 21:26:52

标签: c++ char int ifstream cstring

我正在尝试从文本文件中读取一个数字,但我不允许使用二进制文件。 我已经尝试了两种方法来做到这一点,并且都返回了一个奇怪的结果。

第一种方法:

    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;

... //与问题无关的其他内容

3 个答案:

答案 0 :(得分:1)

此代码:

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

未定义的行为,因为您正在使用theNumber[i]来访问您尚未分配的数组。你应该做的:

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

第二次尝试:

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;

答案 1 :(得分:0)

为您的号码创建存储空间。

char *theNumber; 

这是一个指针。它指向任意位置,因为您没有为其分配地址。

试试这个。

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

或者这个。

int theNumber; 

答案 2 :(得分:0)

您没有为char *theNumber;分配任何内存 theNumber指向随机位置,您正在打印随机字符