我有以下用 C 编写的应用程序:
该应用程序基本上向用户呈现一个包含一个错误字母的单词。要求用户提供错误字母的位置并用新字母替换。
问题是,如果我尝试更改字母编号 4(数组索引 3),新词将是 Act 而不是实际。如果我以编程方式进行,即更改此行
string[letter_number - 1] = change;
对此
string[letter_number - 1] = 'u'
一切正常。请问我该如何解决这个问题?谢谢。
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();
}
马修,
基本上我在 GCC 编译器中测试了你的代码。我需要更改以下内容以使其正常工作
scanf_s("%c\n", &change); //改变如下
scanf("%c", &change);
PS:请注意 fflush(stdin) 不适用于 GCC。
在使用之前验证您的输入是否正确。听起来好像change
被设置为 0,终止字符串。
我不确定您在getchar()
通话之间的scanf()
通话,它们可能会丢失输入。