为什么我的方法1不可以,而且我发现方法1没有进入到for循环里面,他也不报错。很奇怪这是为什么呢?
//方法1
#include
#include
void main(){
char a[100];
scanf("%s",&a);
int i;
for( i=0;a[i]=='\0';i++){
if(a[i]=='m'){
a[i]='w';
}
}
printf("%s",a);
}
//方法2
#include
#include
void main(){
char a[100];
scanf("%s",&a);
int i;
for( i=0;i<=strlen(a);i++){
if(a[i]=='m'){
a[i]='w';
}
}
printf("%s",a);
}
你这里 判的是等于,应该要不等于
for( i=0;a[i]=='\0';i++){
}
// 改成
for( i=0;a[i]!='\0';i++){
}
在方法1中,for循环的条件不正确,应该是a[i]!='\0'而不是a[i]=='\0'。因为在C语言中,字符串以null字符(\0)结尾,而不是以空字符(' ')结尾。因此,当循环条件为a[i]=='\0'时,它将一直为真,因为这个条件将一直在字符串a的末尾处成立,而没有进入循环体。另外,当您使用scanf函数输入字符串时,不需要使用&符号,因为数组名本身就是指向数组第一个元素的指针。
在方法2中,循环条件应该是i<strlen(a)而不是i<=strlen(a)。因为字符串长度函数strlen返回的是字符串中字符的数量,不包括结尾的null字符。如果循环条件为i<=strlen(a),则循环将遍历包括null字符在内的所有字符,这可能导致不必要的操作和错误的输出。
望采纳🥰🥰🥰