【问题标题】:Getting weird number when trying to read a number from file尝试从文件中读取数字时得到奇怪的数字
【发布时间】:2013-03-07 21:26:52
【问题描述】:

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

第一种方法:

    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;

...//其他与问题无关的东西

【问题讨论】:

    标签: c++ char int ifstream cstring


    【解决方案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;
    

    更新:

    在您更新的最后一个代码 sn-p 中,data 流已构建,但从未打开。它不与任何文件关联。因此,尝试从该流中读取不会成功,并且不会将任何内容存储到 number(未初始化)中。

    ifstream data;
    
    // data is not associated to any file after construction...
    
    int theNumber;
    data >> theNumber;
    

    【讨论】:

    • 我打错了,我的意思是 1 = 符号。那个代码没有 c/p'd 并且我手动输入了抱歉。我尝试使用data&gt;&gt;number 执行您的方法,但它仍然打印出一个长数字
    • @ArcaneExplosion:什么时候打印出来?你如何存储号码?你还在用texttheNumber吗? text的定义是什么?从你的问题的文字中我看不到很多东西。尝试放一个简短而完整的代码示例。否则,我会解决你没有的问题,而不是解决你有的问题
    • 不,我没有使用整个 while 循环,我只是执行 data &gt;&gt; theNumber 并在之后立即打印出来以进行错误检查。同样在第二个示例中,theNumberint
    • @ArcaneExplosion:那么你正在读取的文件的内容是什么?
    • 只是一个简单的数字。正如我在上面所说的“123”。
    【解决方案2】:

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

    char *theNumber; 
    

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

    试试这个。

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

    或者这个。

    int theNumber; 
    

    【讨论】:

    • 我使用的第二个示例使用了 int theNumber,但这似乎也不起作用。另一个返回 ASCII
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多