C言語関係掲示板

過去ログ

No866 scanf()で何も入力しなかった場合に終了させる方法

[戻る] [ホームページ]
No.11231

scanf()で何も入力しなかった場合に終了させる方法
投稿者---saki(2003/12/16 20:11:14)


文字型配列を扱っているプログラムなのですが、最初にmemsen()で配列内を全て'\0'で初期化します。
それから配列にscanf()で入力するのですが、何も入力しない場合にエラーメッセージを表示させて終了するプログラムを作るにはどうしたらいいでしょうか?
(つまり、scanf()中にEnterを押すと入力待ちではなく終了するプログラムです)
どうか教えて下さい。

No.11232

Re:scanf()で何も入力しなかった場合に終了させる方法
投稿者---YuO(2003/12/16 21:17:23)


>それから配列にscanf()で入力するのですが、何も入力しない場合にエラーメッセージを表示させて終了するプログラムを作るにはどうしたらいいでしょうか?
>(つまり、scanf()中にEnterを押すと入力待ちではなく終了するプログラムです)

scanfで実現することは不可能です。
fgetsとsscanfを組み合わせるなどして実現する必要があります。


No.11233

Re:scanf()で何も入力しなかった場合に終了させる方法
投稿者---かずま(2003/12/16 22:12:00)


> 文字型配列を扱っているプログラムなのですが、最初にmemsen()で配列内を
> 全て'\0'で初期化します。

この初期化に何か意味があるのでしょうか?


> それから配列にscanf()で入力するのですが、何も入力しない場合にエラーメッ
> セージを表示させて終了するプログラムを作るにはどうしたらいいでしょうか?
> (つまり、scanf()中にEnterを押すと入力待ちではなく終了するプログラムです)

scanf 以外に ungetc を使えばできそうですが、だめですか?
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void no_input(void)
{
    puts("no input");
    exit(1);
}

int main(void)
{
    char buf[256];  int n;

    memset(buf, 0, sizeof buf);
    n = scanf("%c", buf);
    if (n != 1 || buf[0] == '\n') no_input();
    ungetc(buf[0], stdin);
    n = scanf("%s", buf);
    if (n != 1) no_input();
    printf("buf='%s'\n", buf);
    return 0;
}