我正在尝试使用此C ++代码从文本文件中输入一系列数字:
int x = 0;
cin >> x;
ifstream iffer;
int numbers[12];
iffer.open("input.txt");
for (int i = 0; i < 12; i++){
iffer >> numbers[i];
}
这似乎不适用于Mac。 无论文本文件中的值如何,每个单元格都将等于0。换句话说,ifstream没有分配数字。
我该如何使这项工作?这是一个Mac问题,如果是这样,我怎么能让它工作?
谢谢!
Anthony Glyadchenko
答案 0 :(得分:2)
也许打开文件失败了?
您可以检查商品的failbit是否设置为fail()
if(iffer.fail())
{
cout << "Failed to open file." << endl;
}
答案 1 :(得分:1)
尝试(VC9.0):
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
int x = 0;
cin >> x;
ifstream iffer;
int numbers[12];
iffer.open("input.txt");
for (int i = 0; i < 12; i++){
iffer >> numbers[i];
}
for (int i = 1; i < 12; i++){
numbers[i] = i;
}
return 0;
}
这很有效,但第二个循环是错误的。
答案 2 :(得分:1)
它应该有用,但请注意,“get”将始终只读取一个字符。这是我在Mac OSX上测试过的,但这与你的操作系统无关,因为它是标准的C ++:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream iffer;
iffer.open("input.txt");
char numbers[12];
int i = 0;
while (iffer.good()){
numbers[i] = iffer.get();
i++;
}
for (int n = 0; n < 8; n++){
cout << numbers[n];
}
cout << endl;
iffer.close();
}
我正在阅读的文件“input.txt”。确保此文件位于您的工作目录中!:
12345678
在读取文件时,每个字符都将存储在您的数组中。所以当你有一个像
这样的文件时1 2 3 4 5 6
你的数组将包含
numbers[0] = '1'
numbers[1] = ' '
numbers[2] = '2'
numbers[3] = ' '
...
答案 3 :(得分:0)
这听起来像路径问题。您有一个“input.txt”文件某处,但不在当前目录中。如果这是在GUI应用程序中,请记住当前目录有些不可预测,您应该提供相对于某个已知路径的绝对路径或路径(例如,当前应用程序CFBundle的路径)。
为了测试,我刚刚创建了一个Unix程序,其中包含用以下代码包装的精确代码:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
int x = 0;
// your code
cout << numbers[5] << endl;
return 0;
}
它有效,所以如果这是在命令行程序中并且您从正确的目录启动它,则必须在应用程序的某个位置更改当前目录。
答案 4 :(得分:0)
我在 Linux(g ++ 3.4.4)和 Mac(g ++ 4.0.1)上尝试了稍微修改过的代码,它运行得很好!强>
对于Chuck,如果 input.txt 不存在, iffer.fail() 是真正。既然你说的不是这样......
另一种可能性是 不同的 input.txt 文件,而不是您的预期。如果它的数字太少,你会看到零(或其他垃圾值)。 (您可以使用 iffer.eof() 进行测试,但如果没有尾随空格(如换行符),则可以在读取最后一个数字后(适当地)进行测试。在阅读之前测试eof()!)
或者,您可以在代码中的其他位置使用悬空指针,从而不正确地删除某些内容。有时添加和删除大量代码将允许您手动“二分搜索”以确定这些问题的实际位置。
#include <iostream>
#include <fstream>
using namespace std;
#define SHOW(X) cout << # X " = \"" << (X) << "\"" << endl
int main()
{
int x = 0;
cin >> x;
ifstream iffer;
int numbers[12];
iffer.open("input.txt");
SHOW( iffer.fail() );
SHOW( iffer.eof() );
for (int i = 0; i < 12; ++i)
{
SHOW(i);
SHOW(numbers[i]);
iffer >> numbers[i];
SHOW(numbers[i]) << endl;
}
for (int i = 0; i < 12; ++i)
SHOW(numbers[i]);
SHOW( iffer.fail() );
SHOW( iffer.eof() );
}