0

stackoverflow は初めてのユーザーですが、長年の訪問者です。もっと参加するのが賢明だと思いました。しかし、最初に、小さな質問があります:)

基本的に、私がやろうとしているのは、scanf のみを使用してスペース (XYZ) で区切られた 3 つの数値 (正、負、または 10 進数のいずれでもかまいません) を取り、(スペースを無視して) 配列/構造体に配置し、ユーザーが数値を明示的に入力しなかった場合、または数値を間違った形式で入力した場合にエラー メッセージが表示されます。これはscanfで可能ですか?代替手段は何ですか?

尋ねられたさまざまな質問をすべて検索しましたが、理解できる答えが見つかりませんでした(Cの最初のタイマー)。リンク、説明、または少しのサンプルコードをいただければ幸いです:)

4

1 に答える 1

2

3 つの数字を 1 行に並べたいように聞こえます。それらを複数の行に分散させることは受け入れられません。行に 4 番目の数字がある場合に何が起こるかを示していません。

plain を使用scanf()すると、これを制御することは、不可能ではないにしても困難です。使用fgets()sscanf()て実行可能です:

char line[4096];
while (fgets(line, sizeof(line), stdin) != 0)
{
    double v1, v2, v3;
    if (sscanf(line, "%g %g %g", &v1, &v2, &v3) != 3)
        ...format error...
    ...save v1, v2, v3 into your structure or array...
}

必要に応じて、変換が終了した場所を見つけて、3 つの数字の後にラインに破片がなかったことを確認できます。

于 2013-05-20T00:24:53.037 に答える