-2

私はCで何かを書きましたが、それを開いてfile.txtいくつかのデータを管理する必要があります。Eclipseを使い始めたばかりですが(Code ::blocksとNetbeansの後)、Eclipseにファイルを読み取らせるための正しいパスが見つかりません...何か提案はありますか?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define COD 10
#define DIP 1000
#define SIZE 5

int main (int argc, char *argv[])
{
    int ora, minuti, i = 0, j = 0, min_lav;
    int num_dip = 0, trovato, dip_lav = 0;
    int vett_or[SIZE][SIZE];
    char cod_dip[COD+1], vett_dip[DIP][COD+1];


    FILE *fp;

    /* Apertura del file */
    fp = fopen (argv[1], "r");

    /* Verifica della corretta apertura del file */
    if (fp == NULL)
    {
        printf ("Errore nell'apertura del file %s\n", argv[1]);
        exit(EXIT_FAILURE);
    }

    /* Primo caso */
    if (argc == 2)
    {
        /* Lettura dele righe e copia degli elementi in un vettore */
        while (fscanf (fp, "%d %d %s\n", &ora, &minuti, cod_dip) == 3)
        {
            strcpy(vett_dip[num_dip], cod_dip);
            num_dip++;
        }

        /* Stampa dei dipendenti */
        for (i = 0; i < num_dip; i++)
            printf ("Dipendente %d: %s\n", i+1, vett_dip[i]);

        /* Ricerca elementi diversi */
        for (i = 0; i < num_dip; i++)
        {
            trovato = 0;

            for (j = 0; j < i && trovato == 0; j++)
            {
                if (strcmp(vett_dip[i], vett_dip[j]) == 0)
                    trovato = 1;
            }

            if (trovato == 0)
                dip_lav++;
        }

        printf ("\n===================================\n");
        printf ("Ci sono stati %d dipendenti a lavoro", dip_lav);
        printf ("\n===================================\n");

    }

    /* Secondo caso*/
    if (argc == 3)
    {
        while (fscanf (fp, "%d %d %s\n", &ora, &minuti, cod_dip) == 3)
        {
            if (strcmp(argv[2], cod_dip) == 0) {
                vett_or[i][0] = ora;
                vett_or[i][1] = minuti;
                i++;
            }


        }

        /* Stampa del dipendente */
        if (i == 1)
            printf ("Per il dipendete selezionato è stato registrato un solo passaggio\n");

        printf ("Dipendente %s:\n", argv[2]);
        printf ("Primo passaggio: %d  %d\n",vett_or[0][0], vett_or[0][1]);
        printf ("Ultimo passaggio: %d  %d\n", vett_or[i-1][0], vett_or[i-1][1]);

        min_lav = ((vett_or[i-1][0]*60)+vett_or[i-1][1]) - ((vett_or[0][0]*60)+(vett_or[0][1]));

        printf ("Il dipendente selezionato ha lavorato per %d minuti\n\n",min_lav );

    }

    return 0;
}
4

3 に答える 3

1

Eclipse では、プロジェクトに関連付けられていない単一のファイルを実際に開くことはできません (これは非常に煩わしい場合があります)。

プロジェクトを作成し、ファイルを追加します。その後、ファイルを開くことができます;)

編集:さて、あなたの質問を正しく読んでいないことがわかりました。これを無視してください:)

于 2012-06-12T14:11:24.840 に答える
0

(おそらく) ワークスペース フォルダーにある Eclipse プロジェクトのフォルダーに、開きたいテキスト ファイルを配置する必要があります (または絶対パスでテキスト ファイルを開く関数を呼び出します)。新しいプロジェクトを作成すると、新しいプロジェクト ウィザード ウィンドウにワークスペース フォルダーのパスが表示されます。

編集:あなたの問題の解決策かもしれませんEclipseでファイルから読み取る

そこにファイルをコピーした後、プロジェクト フォルダーを更新 (右クリック -> 更新) しようとしましたか? これにより、ファイル システムが Eclipse の内部ファイル システムと同期されます。

于 2012-06-12T14:08:38.510 に答える
0

getcwdプロセスの現在のディレクトリを見つけるために を呼び出すのはどうですか?

  char dir[1024];
  getcwd(dir,1024);

または、ファイルへの絶対パスを指定していただけますか?

于 2012-06-12T14:11:05.670 に答える