0

キーボードから書式設定された入力を取得するために使用する必要がありfgetsます (つまり、13XXXX の形式の学生番号)。私はscanfこれが可能であることを知っていますが、私はあまり確信が持てませんfgets. ユーザーが で始まる文字列を入力したことを確認するにはどうすればよい13ですか?

printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);

編集: sNum学生番号の文字列です。ありがとう。

4

4 に答える 4

1

fgets を使用して文字列を取得し、次に sscanf を使用して解釈します。%i のフォーマット文字列は、文字列を数値として解釈します。sscanf からの戻り値は、その解釈が成功したかどうか (つまり、ユーザーが数字を入力したかどうか) を示します。それがわかったら、その数を 10,000 で割ります。結果が 13 の場合、入力された数値は 13x,xxx の範囲内であることがわかります。

于 2013-08-25T06:06:06.760 に答える
1

への呼び出しfgets()はおそらく間違っています。

char line[4096];
char student_no[7];

printf(">>\t\tStudent No. (13XXXX): ");
if (fgets(line, sizeof(line), stdin) == 0)
    ...deal with EOF...
if (sscanf(line, "%6s", line) != 1)
    ...deal with oddball input...
if (strlen(student_no) != 6 || strncmp(student_no, "13", 2) != 0)
    ...too short or not starting 13...

必要に応じて、さらに条件を適用できます。たとえば、XXXX は数字にする必要がありますか。その場合、文字列を に変換できますint。おそらくstrtol()since を使用すると、変換されていない最初の文字が表示されます。これは、文字列の終端の null にする必要があります。また、10,000 で除算し、結果が 13 であることを確認することで、数値が 13XXXX であることを検証することもできます。また、最初の 6 つの非空白文字の後に続くもの ( に残っているものline) などを確認することもできます。

于 2013-08-25T06:06:59.410 に答える
0
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);

sNum[b]ポインタである sNum である必要があります。

fgets で stdin から行を取得した後、正規表現:で行を確認できます"^13.+"

于 2013-08-25T06:07:27.043 に答える