-1

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

第一种方法:

    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++;
}

未定义的行为,因为您正在使用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;
于 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 回答