C 如何在该程序中接受输入?

C 如何在该程序中接受输入?,c,C,除了字符串,我不能接受输入。 若我在代码本身中给出输入,那个么程序正在工作。 但当我尝试接受输入时,它不起作用。 如何让它接受给定的输入? 例如,如果s是“码本”,from=='o'和to=='e',s将变成“cedebeek” #包括 #定义最大值50 无效替换(字符*s、字符自、字符至) { int i=0; 而(s[i]!='\0') { 如果(s[i]==从) { s[i]=to; } i++; } } int main() { 字符str[MAX]; 煤焦来自; char-to; pr

除了字符串,我不能接受输入。 若我在代码本身中给出输入,那个么程序正在工作。 但当我尝试接受输入时,它不起作用。 如何让它接受给定的输入? 例如,如果s是“码本”,from=='o'和to=='e',s将变成“cedebeek”

#包括
#定义最大值50
无效替换(字符*s、字符自、字符至)
{
int i=0;
而(s[i]!='\0')
{
如果(s[i]==从)
{
s[i]=to;
}
i++;
}
}
int main()
{
字符str[MAX];
煤焦来自;
char-to;
printf(“输入字符串”);
scanf(“%[^\n]s”、&str[0]);
printf(“\n输入要替换的字符”);
scanf(“%c”、&from);
printf(“\n输入要替换的字符”);
scanf(“%c”、&to);
替换(str、from、to);
printf(“\n修改后的字符串是%s”,str);
返回(0);
}

发布的代码中有几个问题。由于数组在大多数表达式中衰减为指向其第一个元素的指针,因此在调用
scanf()
时不需要address操作符
&
;此外,尾随的
s
不是扫描集转换说明符的一部分:

scanf("%[^\n]", str);
正如在评论中所指出的,在这里使用
&str[0]
而不是
str
,这并不是不正确的,但使用不太杂乱的
str
更为惯用,我个人也发现这一点更加清楚

scanf()
返回时,输入流中将保留一个换行符,因此您应该在下次调用
scanf()
时添加前导空格,以便在读取用户输入之前跳过此
\n
字符:

scanf(" %c",&from);
调用
scanf()
也会在输入流中留下
\n
字符,因此:

scanf(" %c",&to);
请注意,在将用户输入读取到字符串中时,应该指定最大宽度以避免缓冲区溢出;使用
MAX
没有简单的方法可以做到这一点,但您可以做到:

scanf("%49[^\n]", str);

通过检查调用
scanf()

scanf(“%[^\n]s”,&str[0])返回的值,可以进一步改进代码并确保输入符合预期-->
scanf(“%[^\n]”,str)
scanf(“%c”和“from”)-->
scanf(“%c”和“from”)为什么有这个扫描(“%[^\n]s”、&str[0]);为什么不只是scanf(“%s”和&str[0])@如果输入的字符太多,则会导致缓冲区溢出。而
%s
在空白处停止,而
%[
没有。scanf(“%49[^\n]”,str);这是49个字符,其中一个是空终止符\0IMO可以编写
&x[0]
而不是
x
,它们完全相同,在某些方面更可读(特别是对于不理解数组和指针的人)@M.M--我不确定我是否同意“它更具可读性”,但我接受你的观点,即学习者可能会发现这个符号更清晰。
scanf("%49[^\n]", str);