-1

したがって、複数の番号を持つファイルがあり、を使用してファイルを開く場合

fp = fopen (filename, "r");

これで、ファイルの内容を正しく読み取ることができますか?どうすればファイルを使って何かを行うことができますか。このファイルのように数字があり、それらを足し合わせたいと思います。

fscanf(fp) 

正しいと思われることの始まりでしょうか?しかし、それを超えて何をすべきかわかりません。開いているファイル内のアイテムを表すコードは何ですか?「x」の場合は、すべての「x」を足し合わせて、そこにあるファイルの総数で割ります。

ファイル内の変数を使用して、それらを使用するにはどうすればよいですか?


編集されたコード:

if (fp != NULL)
{
     while (fscanf(fp, "%lf", &d) == 1)
     sum += d;
     mean = sum / total;

     printf ("The number of data values read from this file was %.0lf\n", total);
     printf ("\n%.2lf\n", mean);

     fclose(fp);
}

if (fp != NULL)
{
    do
    {
        c = fgetc(fp);
        if (c != EOF)
        {
            if ((char)c == '\n')
            total++;
        }
    } while (feof(fp) == 0);
4

3 に答える 3

1

ファイルから読み取った数値を追加する簡単な例(強化されていない)...

#include <stdbool.h>
#include <stdio.h>

int main(int argc, char** argv)
{
    float sum = 0;
    float eachValue;
    FILE *fp;
    fp = fopen(argv[1], "r");
    while (true)
    {
        int scanned = fscanf(fp, "%f\n", &eachValue);
        if (scanned == 1)
        {       
            sum += eachValue;
        }
        else
        {
            break;
        }
    }
    fclose(fp);
    printf("%f\n", sum);
}

強化するには、空の行の処理、開くarg [1]があることの検証、開くファイルがない場合や開くときにその他のエラーが発生した場合の処理​​などを行う必要があります。

于 2012-12-03T20:40:08.400 に答える
0

一般に、これらの多くの関数をファイルから読み取ることができます。

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int fscanf(FILE *restrict stream, const char *restrict format, ...);
size_t fread(void *restrict ptr, size_t size, size_t nitems,FILE *restrict stream);

要件に応じて、これのいずれかを使用してください。

たとえば、あなたが言ったように、あなたはファイルにある番号を追加しなければなりません。

したがって、上記の関数のいずれかを使用してファイルからchar配列に読み取り、区切り文字(ファイル内で数値を区切る文字)を使用して、配列を整数配列または異なる数値に解析してみてください。そうすれば、合計を見つけるのは簡単です。

あなたは男strtodを見る必要があります

また、この男strtok

于 2012-12-03T19:57:26.363 に答える
0

ファイル内の唯一のコンテンツが有効な番号である場合、これは機能します。実際には、有効な番号ではない最初のテキストまで機能します。

#include <stdio.h>

int main(void)
{
    double sum = 0.0;
    char const *filename = "data.file";
    FILE *fp = fopen(filename, "r");
    if (fp != 0)
    {
        double d;
        while (fscanf(fp, "%lf", &d) == 1)
            sum += d;
        fclose(fp);
    }
    printf("%g\n", sum);
    return(0);
}

原則として、関数がファイルを正常に開くと、終了時にファイルを閉じる必要があります。この例では、システムはとにかくファイルを閉じますが、良い習慣を身につけることも同様です。もう少し注意と注意を払えば、フォーマットエラー(からの戻り値0 fscanf())とEOFまたはI/Oエラーを区別できます。

于 2012-12-03T20:18:44.413 に答える