我正在尝试从文本文件中读取一个数字,但我不允许使用二进制文件。 我已经尝试了两种方法来做到这一点,并且都返回了一个奇怪的结果。
第一种方法:
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;
... //与问题无关的其他内容
答案 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
指向随机位置,您正在打印随机字符