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++)- 在第三个位置增加。

于 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 回答