0

皆さん、こんにちは。簡単な質問があります..

fscanf にファイル全体を読み取らせるにはどうすればよいですか?

私がファイルsettings.txtを持っているとしましょう

setting1 = 1
setting2 = 2
setting3 = 3

それらを C プログラミング変数に解析するにはどうすればよいですか?

int setting1, setting2,setting3;

私はこれを簡単にやってみました:

fscanf(fp, "setting2 = %d\n", &setting2);

ただし、これが機能している間、ファイルからthw値を取得することはできません:

fscanf(fp, "setting1 = %d\n", &setting1);

ファイル全体を読み取る適切な方法はありますか?

4

5 に答える 5

3

次の例のように、 各行を読み取りfgets()、コンテンツを解析するのはどうですか: https://stackoverflow.com/a/861822/1150918 ? :)sscanf()

また、個人的には、そのような種類の構成については、Lua か、そのような小さくてシンプルなものを好みます。組み込みの構文チェック、C API、小さなインタープリター サイズ。

于 2013-08-19T15:46:50.017 に答える
1

最良のアプローチは、ファイル I/O を解析から分離し、個々の潜在的なエラーを処理することです。IOW: 避けるfscanf()

void Parse(FILE *fp, int NN) {
  char buf[100];
  int setting[NN];
  int i;
  for (i = 0; i < NN; i++) {
    if (fgets(buf, sizeof(buf), fp) == NULL ) {
      ;  // Handle unexpected I/O error
    }
    int n, count;
    unsigned u;
    count = sscanf(buf, "setting%u = %d", &u, &n);
    // Qualify the parse
    if ((count != 2) && (u <= 0) && (u > NN)) {
      ;  // Handle parse I/O error
    }
    setting[u - 1] = n;
  }
}
于 2013-08-19T18:20:04.590 に答える
1
char line[1024];
int setting[N],i = 0;
while(fgets(fp,line,1024) != NULL)
{
     fscanf(line,"setting%*d = %d",&setting[i++]);
} 
于 2013-08-19T16:20:49.533 に答える
1

次のようなものが必要です。

int setting[3], i;
for(i = 0; i < 3; ++i)
    fscanf(fp, "setting%*d = %d\n", &setting[i]);
于 2013-08-19T15:53:21.593 に答える