2012-10-05 33 views
1

我用C语言编写的应用程序如下:Ç - 更改代号在字符串

的应用基本上呈现包含一个不正确字母词的用户。要求用户提供不正确字母的位置并用新字母替换。

问题是,如果我尝试更改字母数字4(数组索引3),新单词将是Act而不是实际。如果我这样做编程,就是这条线

string[letter_number - 1] = change; 

改变这种

string[letter_number - 1] = 'u' 

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

+0

您放弃了'scanf'的返回值。这是一个严重的编程错误,在解决这个问题之前,一点猜测都没有。 –

回答

1

用简单的scanf代替scanf_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(); 
} 
+0

谢谢。现在我终于可以删除getchar()。但我的问题仍然存在:( – Matthew

+0

我编辑了我的答案。这适用于我 – Eregrith

+0

非常感谢。你的回答帮助我解决了问题:) – Matthew

0

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

我不确定您的getchar()电话之间的电话是scanf(),他们可能会失去输入。

+0

没有getchar(),程序不允许我出于某种原因提供第二个输入(新的字母)。有没有办法解决它?我对C是一个新手。此外,我在Visual Studio中编程。这是否会造成任何问题? – Matthew

+0

虽然程序在正确的位置更改字符串,但我并不认为getchar有效,所以letter_number中的值不会丢失。问题在于变化的价值。 – Matthew

+0

@Matthew,丢失'get_char'并用'%c''(%之前的空格)写入'scanf'跳过空格。 – Shahbaz

0

马修,

基本上我在GCC编译器测试你的代码。我是在需要改变下面的东西,使之在“scanf_s”工作

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

scanf_s( “%C \ n” 个,&变化); //更改如下

scanf(“%c”,&变更);

  • 按照我也就没什么用 “的getchar” scanfs后的目的。最合适的方法应该是在第一次scanf之后刷新输入缓冲区,以便第二次scanf实际上期望用户输入,而不是从输入缓冲区中拾取。

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