1

我有以下用 C 编写的应用程序:

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

问题是,如果我尝试更改字母编号 4(数组索引 3),新词将是 Act 而不是实际。如果我以编程方式进行,即更改此行

string[letter_number - 1] = change;

对此

string[letter_number - 1] = 'u'

一切正常。请问我该如何解决这个问题?谢谢。

4

3 回答 3

1

scanf_s用一个简单的替换你的scanf,你就完成了。否则你可以使用

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();
}
于 2012-10-05T14:48:19.523 回答
0

马修,

基本上我在 GCC 编译器中测试了你的代码。我需要更改以下内容以使其正常工作

  • “scanf_s”中的换行符不应该存在。其原因如下。如果格式说明符中存在空白字符(包括空格、换行符和制表符),则 scanf 函数将读取并忽略(从标准输入)在下一个非空白字符之前遇到的任何空白字符。因此,在这个特定的用例中;即使您输入了输入并按回车键, 您的程序执行也会在此 scanf 语句中无限等待。

scanf_s("%c\n", &change); //改变如下

scanf("%c", &change);

  • 根据我的说法,在 scanfs 之后使用“getchar”的目的较少。最合适的方法应该是在第一个 scanf 之后刷新输入缓冲区,以便第二个 scanf 实际上期望用户输入而不是从输入缓冲区中进行选择。

PS:请注意 fflush(stdin) 不适用于 GCC。

于 2012-10-05T18:13:16.563 回答
0

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

我不确定您在getchar()通话之间的scanf()通话,它们可能会丢失输入。

于 2012-10-05T14:40:25.040 回答