三个问题。
1. for循环的i递增有问题。i应该+=5而不是遍历每一个字符,否则类似a:=b这种会将a和b都进行赋值。
2.大括号问题。switch应该在for循环里面,否则只会在最后进行一次switch。
3.初始化问题。abc应该初始为1。
4.赋值问题。a:=a这种会将a直接设为字符a,应在输入环节加入特判。
修改后的代码如下
by PC114514 @ 2024-03-29 19:32:13
```#include <stdio.h>
#include <string.h>
int main()
{
char p[300];
gets(p);
char a='0',b='0',c='0';
for(int i=0;i<=strlen(p);i+=5){
if(p[i]=='a' && p[i+3]!='a'){
a=p[i+3];
}
if(p[i]=='b' && p[i+3]!='b'){
b=p[i+3];
}
if(p[i]=='c' && p[i+3]!='c'){
c=p[i+3];
}
switch(a){
case 'b':a=b;break;
case 'c':a=c;break;
}
switch(b){
case 'a':b=a;break;
case 'c':b=c;break;
}
switch(c){
case 'a':c=a;break;
case 'b':c=b;break;
}
}
printf("%c %c %c",a,b,c);
return 0;
}
```
我也没啥水平,希望大家共同进步,再见
by PC114514 @ 2024-03-29 19:33:57
@[xrpo0](/user/1239657)
by PC114514 @ 2024-03-29 19:34:12
@[PC114514](/user/813765) ```c
#include <stdio.h>
#include <string.h>
int main()
{
char p[300];
gets(p);
char a='0',b='0',c='0';
for(int i=0;i<=strlen(p);i++){
if(p[i]=='a'&&p[i+1]==':'&&p[i+3]!='a'){
a=p[i+3];
}
if(p[i]=='b'&&p[i+1]==':'&&p[i+3]!='b'){
b=p[i+3];
}
if(p[i]=='c'&&p[i+1]==':'&&p[i+3]!='c'){
c=p[i+3];
}
switch(a){
case 'b':a=b;break;
case 'c':a=c;break;
case 'a':a='0';break;
}
switch(b){
case 'a':b=a;break;
case 'c':b=c;break;
case 'b':b='0';break;
}
switch(c){
case 'a':c=a;break;
case 'b':c=b;break;
case 'c':c='0';break;
}
}
printf("%c %c %c",a,b,c);
return 0;
}
```
谢谢大佬总算过了,第一点我在您回复之前想出来了,但是还是没过,所以就没改了,所以写的很粗糙。我总是把<=strlen(p)搞忘记了,以后还是得多用调试,我这个devc++调试很容易崩溃,不知道为什么
by xrpo0 @ 2024-03-29 20:08:15