今天写了这么一段代码,是C语言编程上的3-3的题目
#include <stdio.h>
#include <string.h>
#define MAX 100
void expand(char s[], char t[])
{
int i;
int j;
int k;
for(i=0,j=0; s[i]!='\0'; i++){
if(s[i]=='-'&&(i==0||i==strlen(s))){
t[j] = s[i];
j++;
}
else{
t[j++] = s[i];
for(i=i+2;t[j]!=s[i];j++){
k=j-1;
t[j] = t[k]+1;
}
}
}
t[++j] = 0;
}
int main()
{
char s1[] = "a-c";
char s2[MAX];
// int i;
int j=1;
int k=0;
for(;s2[j]!=s1[2];j++){
k=j-1;
s2[j] = s2[k]+1;
}
printf("%s", s2);
}
输出一直是这样,百思不得其解,一直以为是字符串出了问题。
<img src="https://img-blog.youkuaiyun.com/20151123124320939" alt="" />
后来发现是for循环的表达式顺序问题,使得在表达式2在判断时被跳过。
for(表达式1;表达式2;表达式3)
语句;
等价于
while(表达式2){
语句;
表达式3;——在执行到for循环语句时执行
}
排除bug真是艰难。。。
以上。