0

関数を使用して 2 つの文字列に入力を取り込もうとしていgets()ます (この関数のみを使用する必要があります)。

しかし、プログラムを実行すると、コンソールgets()は最初の入力を取得するために停止することさえせずに、2 番目の入力に進みます。

デバッグすると、 string に挿入されている入力が表示されずcityName、単に渡されます。

puts()また、文字列を処理するときにバッファに問題があることも知っています. andgets()関数を使用してバッファを「きれいにする」方法はありますか?

#include <stdio.h>
#include <math.h>
#include <string.h>
void main() {
    int z;
    char cityName[50];
    char Coordinates[50]; 
    scanf("%d", &z);
    printf("Please enter city name:\n");
    gets(cityName);
    printf("Please enter city coordinates\n");
    gets(Coordinates);
}       
4

1 に答える 1

1

の呼び出しでscanf("%d", &z);、整数を入力して ENTER を押すと、その数値は によって消費されますscanfが、新しい行はまだバッファ内にあるため、次gets()はその新しい行だけを取得します。

解決策は、最初に を取り除きgets()ます。なぜそれが唯一の関数なのかわかりません。バッファ オーバーフローを引き起こす可能性があるため、危険fgets()です。置き換えて使用します。次に、何かを使用して新しい行を消費します。複数のオプションがあります。たとえば、 への追加の呼び出しを 1 つ使用しfgets()ます。

また、 useint main(void)を使用します。declare を使用するのは未定義の動作void main()です。

于 2013-11-16T13:16:02.873 に答える