我刚刚开始使用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循环没有给出任何输出?
答案 0 :(得分:11)
语法应为;
for (j=0; j<strlen(letter); j++)
由于strlen
是costy操作,并且你没有修改循环内的字符串,所以写得更好:
const int len = strlen(letter);
for (j=0; j<=len; j++)
此外,强烈建议在使用C字符串和用户输入时始终检查缓冲区溢出:
while ((c=getchar()) != EOF && i < ARRAYSIZE - 1)
答案 1 :(得分:7)
错误在for中,只需交换结束条件和增量,如下所示:
for (j = 0; j <= strlen(letter); j++)
问题:最后一个角色是什么?
答案 2 :(得分:4)
for (j=0;j++;(j<=strlen(letter)))
这不正确。
它应该是for (j=0; j<=strlen(letter); j++)
- 在第三个位置递增。
答案 3 :(得分:3)
for
循环的正确格式为:
for (initialization_expression; loop_condition; increment_expression){
// statements
}
所以你的for
循环应该是
for (j = 0; j < strlen(letter); j++)
答案 4 :(得分:2)
在for循环中,条件是i ++,第一次计算结果为false(0)。您需要交换它们:for (j=0; j <= strlen(letter); j++)