C-更改字符串中的字母

C-更改字符串中的字母,c,string,replace,character,C,String,Replace,Character,我用C语言编写了以下应用程序: 该应用程序基本上向用户呈现一个包含一个不正确字母的单词。要求用户提供错误字母的位置,并用新字母替换 问题是,如果我尝试更改字母4(数组索引3),新词将是Act而不是ACTIVE。如果我以编程方式进行,也就是说,更改这一行 string[letter_number - 1] = change; 对此 string[letter_number - 1] = 'u' 一切正常。请问我怎样才能解决这个问题?谢谢。在使用输入之前,请验证输入是否正确。听起来好像chang

我用C语言编写了以下应用程序:

该应用程序基本上向用户呈现一个包含一个不正确字母的单词。要求用户提供错误字母的位置,并用新字母替换

问题是,如果我尝试更改字母4(数组索引3),新词将是Act而不是ACTIVE。如果我以编程方式进行,也就是说,更改这一行

string[letter_number - 1] = change;
对此

string[letter_number - 1] = 'u'

一切正常。请问我怎样才能解决这个问题?谢谢。

在使用输入之前,请验证输入是否正确。听起来好像
change
设置为0,终止字符串


我不确定在
scanf()
调用之间的
getchar()
调用是否正确,它们可能会丢失输入。

请在使用它们之前验证输入是否正确。听起来好像
change
设置为0,终止字符串


我不确定您在
scanf()
调用之间的
getchar()
调用是否正确,它们可能会丢失输入。

用一个简单的
scanf
替换
scanf\u s
,您就完成了。或者你可以用

scanf_s("%d ", ...);
并删除
getchar()

这对我很有用:

#include <string.h>
#include <stdio.h>

int main()
{
  char string[9] = "Actwally";
  int letter_number;
  char change;

  printf("---Spot the Odd Letter Out---\n\n");
  printf("The word below contains one letter which is incorrect:\n\n");
  printf("Word: %s\n\n\n", string);
  printf("Please provide the position of the incorrect letter and propose a new   letter\n\n");
  printf("Position of incorrect letter: ");
  scanf("%d ", &letter_number);
  printf("\nProposed new letter: ");
  scanf("%c ", &change);
  string[letter_number - 1] = change;
  printf("\n\nThe new word looks like this %s\n\n\n", string); 
  if(strcmp("Actually", string) == 0)
  {
    printf("You are right!  Congratulations!");
  }
  else
  {
    printf("Sorry, but you have not guessed the word.  Better luck next time!");
  }
  printf("\n\n\nPlease press enter to exit the program");
  getchar();
}
#包括
#包括
int main()
{
字符字符串[9]=“Actwally”;
整数字母_数;
煤焦变化;
printf(“----找出奇数字母---\n\n”);
printf(“下面的单词包含一个不正确的字母:\n\n”);
printf(“单词:%s\n\n\n”,字符串);
printf(“请提供错误信函的位置并提出新信函\n\n”);
printf(“错误字母的位置:”);
scanf(“%d”和字母编号);
printf(“\n建议的新字母:”);
scanf(“%c”、&change);
字符串[字母编号-1]=更改;
printf(“\n\n新词看起来像这个%s\n\n”,字符串);
if(strcmp(“实际”,字符串)==0)
{
printf(“你说得对!祝贺你!”);
}
其他的
{
printf(“对不起,你没猜到这个词。祝你下次好运!”);
}
printf(“\n\n\n请按enter退出程序”);
getchar();
}

用一个简单的
scanf
替换你的
scanf\u
,你就完成了。或者你可以用

scanf_s("%d ", ...);
并删除
getchar()

这对我很有用:

#include <string.h>
#include <stdio.h>

int main()
{
  char string[9] = "Actwally";
  int letter_number;
  char change;

  printf("---Spot the Odd Letter Out---\n\n");
  printf("The word below contains one letter which is incorrect:\n\n");
  printf("Word: %s\n\n\n", string);
  printf("Please provide the position of the incorrect letter and propose a new   letter\n\n");
  printf("Position of incorrect letter: ");
  scanf("%d ", &letter_number);
  printf("\nProposed new letter: ");
  scanf("%c ", &change);
  string[letter_number - 1] = change;
  printf("\n\nThe new word looks like this %s\n\n\n", string); 
  if(strcmp("Actually", string) == 0)
  {
    printf("You are right!  Congratulations!");
  }
  else
  {
    printf("Sorry, but you have not guessed the word.  Better luck next time!");
  }
  printf("\n\n\nPlease press enter to exit the program");
  getchar();
}
#包括
#包括
int main()
{
字符字符串[9]=“Actwally”;
整数字母_数;
煤焦变化;
printf(“----找出奇数字母---\n\n”);
printf(“下面的单词包含一个不正确的字母:\n\n”);
printf(“单词:%s\n\n\n”,字符串);
printf(“请提供错误信函的位置并提出新信函\n\n”);
printf(“错误字母的位置:”);
scanf(“%d”和字母编号);
printf(“\n建议的新字母:”);
scanf(“%c”、&change);
字符串[字母编号-1]=更改;
printf(“\n\n新词看起来像这个%s\n\n”,字符串);
if(strcmp(“实际”,字符串)==0)
{
printf(“你说得对!祝贺你!”);
}
其他的
{
printf(“对不起,你没猜到这个词。祝你下次好运!”);
}
printf(“\n\n\n请按enter退出程序”);
getchar();
}
Matthew

基本上,我在GCC编译器中测试了您的代码。我需要改变以下几点来让它工作

  • “scanf_s”中的换行符不应该出现。原因如下如果格式说明符中存在空白字符(包括空格、换行符和制表符),scanf函数将读取并忽略(从stdin)在下一个非空白字符之前遇到的任何空白字符。因此,在这个特定的用例中;您的程序执行将在此scanf语句中无限等待,即使在您输入输入后加上enter键
扫描(“%c\n”和更改)//更改如下

scanf(“%c”、&change)

  • 在我看来,在scanfs之后使用“getchar”没有什么意义。最合适的方法应该是在第一次扫描之后刷新输入缓冲区,这样第二次扫描实际上期望用户输入,而不是从输入缓冲区中拾取
PS:请注意,fflush(stdin)不适用于GCC。

基本上,我在GCC编译器中测试了您的代码。我需要改变以下几点来让它工作

  • “scanf_s”中的换行符不应该出现。原因如下如果格式说明符中存在空白字符(包括空格、换行符和制表符),scanf函数将读取并忽略(从stdin)在下一个非空白字符之前遇到的任何空白字符。因此,在这个特定的用例中;您的程序执行将在此scanf语句中无限等待,即使在您输入输入后加上enter键
扫描(“%c\n”和更改)//更改如下

scanf(“%c”、&change)

  • 在我看来,在scanfs之后使用“getchar”没有什么意义。最合适的方法应该是在第一次扫描之后刷新输入缓冲区,这样第二次扫描实际上期望用户输入,而不是从输入缓冲区中拾取

PS:请注意,fflush(stdin)不能与GCC一起使用。

没有getchar(),出于某种原因,程序不允许我提供第二个输入(新字母)。有办法绕过它吗?我是C语言的新手。此外,我在Visual Studio中编程。这会产生任何问题吗?我不认为getchar有什么作用,因为程序会在正确的位置更改字符串,所以字母_number中的值不会丢失。问题在于更改中的值。@Matthew,丢失
get