0

Cプログラムを使って各行の文字数を知りたいです。1行に1つのステートメントがある場合はうまくいきます。ただし、複数のステートメントが意味する場合は、その後に 0 が追加されます。必要なものを実現するためにコードを変更するにはどうすればよいですか? 前もって感謝します。

fp=fopen("chumma.c","r");
while((c=getc(fp))!=EOF)
{
    cn++;
    if((c=='\n') || (c==';'))
    {
         if((cn-1)==0)
            em++;
        n++;
        printf("\nNo. of char in line %d : %d\n",n,(cn-1));
        ll[n-1]=cn-1;
        cn=0;
    }
}
4

5 に答える 5

0

さて、私は本当にコードを忘れましたが、それでも間違いなくあなたを助ける非常に健全なロジックをあなたに与えることができます。文字ポインタについて聞いたことがある場合は、問題ありません。

1)fopenを使用してファイルを開きます。2)endoffile EOFまでループを開始し、ファイルのコンテンツ全体を配列に入力します。3)その配列の開始位置で文字ポインタを作成し、'\0'//その配列の終了文字までループ内に配置します。4)各反復でのポインターの値を使用して、各要素がどのようなものかを計算できます(数値またはアルファベット-ASCII比較)

それが役立つかどうか教えてください

于 2012-12-14T08:27:41.323 に答える
0

次のコードは少し大雑把に見えますが、それでも機能します。誰かがそれを単純化できる場合は、私に知らせてください。ありがとう。

while((c=getc(fp))!=EOF)
{
  cn++;
  if(c==';')
  {
    n++;
    printf("\nNo. of char in line %d : %d\n",n,cn);
    ll[n-1]=cn;
    cn=0;
    flag=1;
  }

  if(c=='\n')
  {
    if(flag==1)
    {
      flag=0;
      cn--;
    }

    else{
      if((cn-1)==0)
         em++;
      n++;
      printf("\nNo. of char in line %d : %d\n",n,(cn-1));
      ll[n-1]=cn-1;
      cn=0;
    }
  }
}
于 2012-12-14T07:21:36.477 に答える
0

次のコードはあなたのために働くはずです。私はコンパイルしていません。

#define SIZE 1024
char buffer[SIZE];
char * pch;
int cn = 0;

fp=fopen("chumma.c","r");
while (fgets(buffer, SIZE, fp)) 
{
  pch = strtok (buffer,";");
  while (pch != NULL)
  {
    cn += strnlen(pch,SIZE);
    pch = strtok (NULL, ";");
  }
    n++;
    printf("\nNo. of char in line %d : %d\n",n, cn);
  cn = 0;
}

お役に立てれば。

于 2012-12-14T05:59:17.493 に答える