1

私はCで書かれた次のアプリケーションを持っています:

アプリケーションは基本的に、1つの間違った文字を含む単語をユーザーに提示します。ユーザーは、間違った文字の位置を指定して、新しい文字に置き換えるように求められます。

問題は、文字番号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

入力を使用する前に、入力が正しいことを確認してください。change0に設定されているように聞こえ、文字列が終了します。

getchar()通話の合間にあなたの通話についてはよくわかりませんscanf()。入力が失われる可能性があります。

于 2012-10-05T14:40:25.040 に答える
0

マシュー、

基本的に、GCCコンパイラでコードをテストしました。私はそれを機能させるために次のものを変更する必要がありました

  • 「scanf_s」の改行文字はそこにあるべきではありません。その理由は以下のとおりです。フォーマット指定子内に空白文字(スペース、改行、およびタブ文字を含む)が存在する場合、scanf関数は、次の非空白文字の前に検出された空白文字を読み取り、無視します(stdinから)。この結果として、この特定のユースケースでは、入力の後にEnterキーを入力した後でも 、プログラムの実行はこのscanfステートメントで無限に待機します。

scanf_s( "%c \ n"、&change); //これを以下のように変更します

scanf( "%c"、&change);

  • 私のように、scanfsの後に「getchar」を使用する目的はあまりありません。最も適切な方法は、最初のscanfの後に入力バッファーをフラッシュすることです。これにより、2番目のscanfは、入力バッファーから選択するのではなく、ユーザー入力を実際に期待します。

PS:fflush(stdin)はGCCでは機能しないことに注意してください。

于 2012-10-05T18:13:16.563 に答える