你必須通過指針fscanf()
:
fscanf(file,"%d, %d", &y[xy], &x[xy]);
而且,由於x
和y
是double
向量,則需要使用%lf
來讀取值。你也應該從fscanf()
檢查返回值,以確保兩個值均成功讀取:
if (fscanf(file, "%lf, %lf", &x[xy], &y[xy]) != 2)
...handle error...
你需要打開編譯警告和解決什麼編譯器發出警告 - 或者得到一個更好的編譯器,它爲您提供了這樣的警告(如果你使用G ++,g++ -Wall
是一個好的開始)。
注意,那就是,這種奇怪的代碼讀取一行到line
,然後讀取一些數據從文件直接。您的意思是這樣寫:
if (sscanf(line, "%lf, %lf", &x[xy], &y[xy]) != 2)
...handle error...
你有什麼都會有fgets()
讀取第一行(假設沒有什麼比1昆明植物研究所長),那麼fscanf()
將讀取一行中的前兩個數字,而下的fgets()
迭代將讀取行渣,留fscanf()
找到下一行的數字。不尋常的,但一個可行的方案。
在評論中,你說每行的格式是x
選項卡y
;如果是這樣的話,沒有逗號分隔值,則需要從格式字符串中刪除逗號:
if (sscanf(line, "%lf %lf", &x[xy], &y[xy]) != 2)
...handle error...
但是,如果你的崩潰確實在while
線發生的事情,那麼你的問題是幾乎當然,該文件無法打開。始終檢查從fopen()
(或任何其他文件打開功能)返回。您可能無法打開文件的原因有很多,原因很多,並且假設文件打開時並不會導致快樂,所以會出現錯誤。
此外,在C++中,它是作爲定義它們來初始化變量是一個好主意:
FILE *file = fopen("ecg.txt", "r");
if (file == 0)
...handle error...
QVector<double> x(1000), y(1000);
char line[1024];
int xy = 0;
確定調用'fopen'成功了嗎? – 2013-02-12 01:19:17
你有一行文字,那麼兩個座標值? – 2013-02-12 01:25:31
沒有,這就像 X(標籤)Y – SamuelNLP 2013-02-12 01:27:33