2013-03-07 79 views
-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; 

... //无关的其他的东西,一些大数量的结果问题

回答

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; 

UPDATE:

在过去的代码片断你更新时,data流构造,但从不打开。它没有关联到任何文件。因此,尝试从该流读取将不会成功,并且没有任何内容将存储到number(未初始化)中。

ifstream data; 

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

int theNumber; 
data >> theNumber; 
+0

我打错了,我的意思是1 =符号。该代码没有c/p'd,我手动键入它抱歉。我试着用'data >> number'做你的方法,并且它仍然打印出一长串数字 – SemicolonExpected 2013-03-07 21:33:09

+2

@ArcaneExplosion:什么时候打印?你如何存储号码?你还在使用'text'和'theNumber'吗? “text”的定义是什么?从你的问题文本中看不到很多东西。尝试在那里放一个你正在使用的代码的简短,完整的例子。否则,我会解决你没有的问题,而不是解决你有的问题 – 2013-03-07 21:35:24

+0

不,我没有使用整个while循环,而只是执行'data >> theNumber',并在错误检查后立即打印出来目的。在第二个例子中'theNumber'是'int' – SemicolonExpected 2013-03-07 21:36:54

0

创建您的号码存储。

char *theNumber; 

这是一个指针。它指向某处是任意的,因为你还没有分配地址。

试试这个。

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

或这个。

int theNumber; 
+0

我使用的第二个例子使用int theNumber,而且看起来似乎也没有问题。另一个返回ASCII – SemicolonExpected 2013-03-07 21:34:36

0

您没有为char *theNumber;分配任何内存。
theNumber点到任意位置,要打印随机字符

相关问题