Printf()函数表现得很奇怪

时间:2015-11-22 09:41:11

标签: c++

道歉,如果这个问题很愚蠢,我是编码的新手,特别是在C ++中。我正在尝试从空格分隔的文本中读取数据点,然后使用printf函数将它们输出到控制台。当我尝试这个时;

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
    double x[1000];
    int i = 0;
    int j;
    double y[1000];
    double sigmay[1000];

    ifstream dataFile("xys_test.txt");

    if (dataFile.is_open()) {
        while (!dataFile.eof())
        dataFile >> x[i] >> y[i] >> sigmay[i];
        printf("x = %5.2f, y = %5.2f, sigmay = %5.2f\n", x[i], y[i], sigmay[i]);
    i++;
}
}

当我希望所有点都输出到控制台时,所有控制台输出都是最后一个数据点。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您的{ ... }阻止内容缺少一对while。目前,只有dataFile >> x[i] >> y[i] >> sigmay[i];行位于while块内。

if (dataFile.is_open()) {
    while (!dataFile.eof()) {
        dataFile >> x[i] >> y[i] >> sigmay[i];
        printf("x = %5.2f, y = %5.2f, sigmay = %5.2f\n", x[i], y[i], sigmay[i]);
        i++;
    }
}

答案 1 :(得分:2)

你丢了大括号,

while (!dataFile.eof()) {
  dataFile >> x[i] >> y[i] >> sigmay[i];
  printf("x = %5.2f, y = %5.2f, sigmay = %5.2f\n", x[i], y[i], sigmay[i]);
  i++;
}

答案 2 :(得分:2)

代码应为:

while ( i < 1000 && (dataFile >> x[i] >> y[i] >> sigmay[i]) )
{
    printf("x = %5.2f, y = %5.2f, sigmay = %5.2f\n", x[i], y[i], sigmay[i]);
    ++i;
}

您应该测试读取操作是否成功,以决定是否继续打印和提交数据。测试eof是无关紧要的,也是错误的。

同样#include <cstdio>应该用于printf。可能你的编译器/库设置涉及istream包含cstdio,但一般情况并非如此。