这个想法是我输入一个句子并将其存储为字符串...然后我可以选择一个字母并将其更改为另一个字母
int main(int argc, char *argv[])
{
char string[100];
char newLetter;
char oldLetter;
int i = 0;
printf("Please enter your sentence : ");
gets(string);
printf("\n\nWord is : %s" , string );
printf("\n\nTarget : ");
scanf("%s", &oldLetter);
printf("Replace with : ");
scanf("%s", &newLetter);
for ( i = 0; i < sizeof(string); i++)
{
if (string[i] == oldLetter)
{
string[i] = newLetter;
break;
}
}
printf("\n\nWord is : %s" , string );
system("PAUSE");
return 0;
}
例如。 输入可能是 - 黄色卡车红色卡车
然后目标 - r
更改为 - t
输出 - 黄色很多特德
答案 0 :(得分:1)
将扫描两个字母时的%s
更改为%c
,代码将完美运行。
答案 1 :(得分:0)
首先,由于您的目标是通过char oldLetter
将字符存储到char newLetter
和scanf
,因此您应该使用format specifier %c
代替%s
。
但是,由于以下原因,这还不够:当您使用scanf
或gets
等功能时,会提示用户输入stdin
流中的字符。 stdin
流是缓冲流。您可以将其视为:
当scanf
到来时,您输入A
然后按Enter键,就会在流中添加以下字符:
'A' '\n'
\n
是新行字符。使用回车键,您还可以通知scanf
您已完成。 scanf
然后开始发布stdin
缓冲区,让我们看看'A'
,%c
字符的正确值。这需要一个,留下\n
。
然后下一个scanf
来了,在流中寻找%c
,找到\n
就绪,将其取出。这是你不想要的。两种防止它的方法:
fflush( stdin );
来电后使用scanf
或while( getchar( ) != '\n' );
来电scanf
解除/丢弃缓冲区中的剩余字符。
如果要替换每个匹配项而不仅仅是第一个匹配项,请删除break;
。
答案 2 :(得分:0)
你可以做得对,或者你可以做错了,并希望这个人没有输入正确的一系列击键或管道在一个不以换行结束的文件中,以打破它......你