正如节目所示,我不知道打印出新结果有什么问题。 例如当我用position = 0,value = v调用modify_str()函数时, 它不会出现“vello”结果,但会引发一个短暂的胡言乱语。 任何人都可以识别错误!?感谢:)
#include<stdio.h>
void print_(char *abc);
void modify_str(char *a);
void main(){
char c[20]="Hello";
print_(c);
modify_str(c);
}
void print_(char *str){
int i=0;
while(*(str+i) != '\0'){
printf("%c", str[i]);
i++;
}
printf("\n");
}
void modify_str(char *c){
char q[]="Position of char to modify (0-n): ";
print_(q);
int pos;
scanf("%d", &pos);
printf("value to replace: ");
char w;
scanf("%s", &w);
int index=0;
while(*(c+index) !='\0'){
if(index==pos){
c[index]=w;
printf("New Result: %c\n", c);
}
index++;
}
}
答案 0 :(得分:1)
使用不正确的格式说明符
代替此调用scanf("%s", &w);
使用
scanf(" %c", &w);
^^^
while循环应该看起来像
while( *(c+index) !='\0' && index != pos ) ++index;
if ( index == pos && *( c + index ) != '\0' )
{
c[index]=w;
printf("New Result: %s\n", c);
^^
}
使用标识符c
命名一个字符串也是一个坏主意,该字符串通常用于命名char
类型的对象。最好使用标识符s
。
考虑到根据C标准,没有参数的函数main应声明为
int main( void )
顺便说一下,函数print_
可以像
void print_( const char *str )
{
puts( str );
}
不要在标识符中使用尾随下划线。这只是一种糟糕的编程风格。