潤曉 發問時間: 電腦與網際網路程式設計 · 1 0 年前

C++讀取txt到陣列,並運算的問題

我的txt檔有4行數據,聽說是要設定二維陣列

1 6 3.00 90000.00

1 7 3.00 90000.00

2 8 1.80 90000.00

2 9 1.80 90000.00

3 10 2.00 90000.00

3 11 2.00 90000.00

4 12 1.20 90000.00

4 13 1.20 90000.00

5 41 2.00 90000.00

.

.

.

讀入後我只需要用到第一行的數據

並判斷個別數字,出現的總次數

最後的輸出結果必須跑出這樣的形式

A[1]=2 (1共出現2次)

A[2]=2 (2共出現2次)

A[3]=2 (3共出現2次)

A[4]=2 (4共出現2次)

A[5]=1 (5共出現1次)

.

.

我使用的是Visual C++6,還請高手幫忙拉^^

已更新項目:

J兄,你的程式碼我複製過來不能用ㄝ,會出錯,能請您再幫我看看嗎?

我貼一下我同學寫的(但是像A[3]=0會無法顯示)

#include

#include

#include

#include

using namespace std;

void main()

{

int i=1,j=1,k,h=1;

double link[457][4]={0};

int a[457][2]={0};

ifstream file("big-link.txt",ios::in);

2 個已更新項目:

if(!file)

{

cout << "檔案無法開啟"<

> link[i][j] ;

}

}

file.close();

3 個已更新項目:

a[h][1]=link[1][1];

a[h][2]++;

for(k=2;k<=457;k++)//

{

if(link[k][1]==a[h][1])

{

a[h][2]++;

a[h][1]=link[k][1];

}

else

{

cout << "A[" << a[h][1] << "] = "<< a[h][2] << endl;

h++;

a[h][1] = link[k][1];

a[h][2]++;

}

4 個已更新項目:

檔名的地方我知道,我也在你說的地方加上

else

printf("File not found\n");

是沒有error但是執行時會跑出紅色警告,中止 重試

跟我用Viaual C++6有關西嗎?

5 個已更新項目:

就是我點下紅色驚嘆號執行後~她跑出

Debug Error!

C:\Debug\0930.exe

runtime error

中止 重試 略過

所以沒有結果跑出來,3個鍵我都試過了...

6 個已更新項目:

http://tw.knowledge.yahoo.com/question/question?qi...

這位網友也是發生跟我一樣的問題...

3 個解答

評分
  • 1 0 年前
    最佳解答

    1. 你 2~4 欄的資料都再也不要了?

    2. 你還要原始的第一欄嗎?

    3. 列數是否未知? 可有上限? (做法不同)

    (4. 第一欄有啥特性,如:不遞減?,和上一列相等或+1,...)

    2008-09-29 19:01:07 補充:

    下列程式只是針對您目前的需要而設計。

    它並非良好的設計,因為細節需求不詳。

    使用 short 因

     一個 col0 的數值出現 32767次可能性太低;

     用 int 太浪費

    用 fgets + sscanf 解決 buffer underrun問題,而不必去用 fscanf_s。

    fscanf_s 當 buffer underrun 時的處理方式,不適用於多數程式!

    #include <memory.h>

    #include <stdio.h>

    #include <stdlib.h>

    #define SIZE 1048576

    #define SIZE_LINE 1024

    short A[SIZE];

    int main(void)

    { double col2, col3;

    int col0, col1, n;

    FILE *fp;

    char buf[SIZE_LINE];

    memset(A, 0, SIZE*sizeof(*A)); // clear

    if ((fp = fopen("Col1.TXT", "r")) != NULL)

    { while (fgets(buf, SIZE_LINE, fp) != NULL)//use fgets + sscanf for savety

    { n = sscanf(buf, "%d %d %lf %lf", &col0, &col1, &col2, &col3);

    if (n != 4)

    break; // error

    if (col0 < SIZE && col0 > 0)

    A[col0]++;

    else

    printf("Index excceed capacity!!\a\n");

    };

    }

    for (n=0; n<SIZE; n++)

    if (A[n])

    printf("[%5d] %hd\n", n, A[n]);

    system("PAUSE");

    return fclose(fp);

    }

    2008-09-29 19:02:34 補充:

    以你目前的需求,一維就搞定。

    未來要讀 col 1 ~ 3,建議用struct 或 四個一維

    此題個人認為,不該用二維

    2008-09-29 19:03:38 補充:

    程式沒仔細測試(有大略測試),

    你要自行測試一下!

    2008-09-30 04:53:06 補充:

    不能用的定義是什麼?

     compiler 不過?

     執行時出錯?

     出來的答案是什麼?

    怎麼個錯法?

    你總要給我個方向。

    2008-09-30 04:55:44 補充:

    如果只是沒反應,那是檔名不同,你改一下檔名(fopen("...", "r");)。

    要是開檔沒成功要有錯誤訊號,在很後面

     for (n=0; ...

    前加上

    else

    printf("File not found\n");

    就可以了

    2008-09-30 04:57:45 補充:

    你同的學程式被知識+吃掉太多,沒辦法看!

    2008-09-30 05:00:41 補充:

    我說過,我測過:就是說:它可以 compile,可以 run,答案是對的。

    我 post 出來的程式多少都做過 stress test,

    至少會做基本的 test。

    沒做過 stress test的,才會說:沒好好測。

    我沒裝 VC6,我用的是 VSC 2005

    最多只是版本差異的問題。

    你總要給我錯誤訊號。

    2008-10-01 07:32:25 補充:

    x 的功力也不弱,有可能是相容性問題。

    那程式我再跑過,沒錯!

    我請有用 VC6 的高手跑跑看。

    你 compile 時,沒有錯誤/警告嗎?

    2008-10-01 07:34:48 補充:

    你把

    #define SIZE 1048576

    的 1048576 改小試試,如:3000

    2008-10-01 09:10:56 補充:

    我請高手用 VC6 試的結果,是 VC6 的 Bug!

    你在 memset 前加一列

    col2 = col3 = 0.;

    就可以了。

    這題double 不用初值,

    VC6 在我沒用 double 下,沒 link floating 的 lib,造成的問題

    所以,就〝用〞它一下吧。

    2008-10-01 20:08:05 補充:

    所以我回答時最開始才加上那兩句啊!

    要是要寫成 general,...

    是可以不用寫得很複雜啦!

    不過,不太想。

  • SiYu
    Lv 5
    1 0 年前

    第一欄的數值最大會有多大阿 ...

    太大用Jocob 寫的方法可是沒辦法處理的.

  • 1 0 年前

    1.目前的作業暫時只會用到第一欄,2~4後續的延伸才會使用到

    2.是可以不要,結果要能跑出A[1]=2就行了

    假使txt第一行中1有出現5次,那結果就是A[1]=5

    假使txt第一行中3有出現8次,那結果就是A[3]=8

    3.筆數不一定,到時老師會給txt檔測試,這個程式需要跑出正確的結果

    4.第一欄雖然看似遞增,但老師說不一定,所以還是要都去判斷

    11223344566678888.....(第一行)

    有勞幫忙了,感謝!!

還有問題?馬上發問,尋求解答。