6

私は C から始めたばかりで、Ritchie の本からいくつかの例を試していました。文字配列を理解するための小さなプログラムを作成しましたが、いくつかのエラーに出くわし、何が間違っているのかについての洞察を期待していました。

#include <stdio.h>
#define ARRAYSIZE 50
#include <string.h>

main () {
  int c,i;
  char letter[ARRAYSIZE];
  i=0;
  while ((c=getchar()) != EOF )
  {    
    letter[i]=c;
    i++;
  }
  letter[i]='\0';
  printf("You entered %d characters\n",i);
  printf("The word is ");

  printf("%s\n",letter);
  printf("The length of string is %d",strlen(letter));
  printf("Splitting the string into chars..\n");
  int j=0;
  for (j=0;j++;(j<=strlen(letter)))
    printf("The letter is %d\n",letter[j]);
}

出力は次のとおりです。

$ ./a.out 
hello how are youYou entered 17 characters
The word is hello how are you
The length of string is 17Splitting the string into chars..

何が起こっている?for ループから出力が得られないのはなぜですか?

4

5 に答える 5

11

構文は次のとおりです。

for (j=0; j<strlen(letter); j++)

strlenコストのかかる操作であり、ループ内で文字列を変更しないため、次のように記述することをお勧めします。

const int len = strlen(letter);
for (j=0; j<=len; j++)

さらに、C 文字列とユーザー入力を使用する場合は、常にバッファー オーバーフローをチェックすることを強くお勧めします。

while ((c=getchar()) != EOF && i < ARRAYSIZE - 1)
于 2012-05-09T17:30:54.213 に答える
7

エラーは for にあります。終了条件とインクリメントを次のように入れ替えるだけです。

for (j = 0; j <= strlen(letter); j++)

質問: 最後の文字は何ですか?

于 2012-05-09T17:30:23.830 に答える
4

for (j=0;j++;(j<=strlen(letter)))それは正しくありません。

for (j=0; j<=strlen(letter); j++)3 番目の位置でインクリメントします。

于 2012-05-09T17:31:30.033 に答える
3

forループの正しい形式は次のとおりです。

for (initialization_expression; loop_condition; increment_expression){
    // statements
}

あなたのforループは

for (j = 0; j < strlen(letter); j++)
于 2012-05-09T17:31:19.930 に答える
2

for ループでは、条件は i++ で、最初は false (0) と評価されます。それらを交換する必要があります:for (j=0; j <= strlen(letter); j++)

于 2012-05-09T17:33:21.293 に答える