4桁の数字以外を入力したらエラーを表示する方法

このQ&Aのポイント
  • 質問文章では、4桁の数字以外を入力した際にエラーを表示する方法についての解説を求めています。
  • 既存の方法としては、入力値が4桁の数字でない場合に条件分岐を使ってエラーメッセージを表示する方法があります。
  • また、正規表現を使って入力値が4桁の数字であるかをチェックする方法もあります。
回答を見る
  • ベストアンサー

4桁の数字以外を入力したらエラーを表示したいです

if文とwhile(for)文の範囲の課題で4桁の数字を入力してどうこうというプログラムを作っています。 課題には書かれていませんが、4桁の数字以外を入力したときにエラーを表示させるにはどんな方法がありますか? 10000以下をはじけばいいんじゃないかと思ったのですが、これだと「0001」などもはじかれてしまうようでして、アルファベットや記号が含まれるものも同時にはじきたいのですが、何か良い方法がわかる方いましいたら、ぜひ解説をお願いします。 なお課題では、理解していれば習っていない関数も使っていいと書かれていました。こんな関数を使ってみては?というものがあれば教えていただけるとうれしいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

文字列で取得しているのなら、「4桁」の判断はstrlen()が楽です。 また、同様に「数値」の判断はisdigit()が楽ですが、こっちは各桁が'0'以上'9'以下の範囲内に収まっている、という判断の仕方もありますね。

xenotactic
質問者

お礼

ありがとうございました! strlenとisdigitを使うことにします。

その他の回答 (1)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

#include <stdio.h> void main(void) { int i; int n; char c; char buf[5]; for(;;) { printf("数字4桁を入力して下さい:"); n = scanf("%4s",buf); c = getchar(); if (c !='\n') { while (getchar() != '\n') {;} printf("入力エラー\nもう一度"); continue; } for (i = 0;i < 4;i++) { if ((buf[i] < '0') || (buf[i] > '9')) { n=0; break; } } if (n != 1) { printf("入力エラー\nもう一度"); continue; } break; } printf("4桁の数字は[%s]です\n",buf); }

関連するQ&A

  • charを使わずに4桁の数字以外を入力したらエラーを表示したいです

    http://oshiete1.goo.ne.jp/qa4515709.html 上記の質問の続きとなります。 C言語で4桁の数字を入力させ、4桁の数字以外が入力されたらエラーを表示し、 4桁の数字が入力されたら、各位の数についていくつかの計算を行いたいです。 回答者の方のアドバイスから、文字列として入力し、字数をstrlenで、各桁の数をisdigitで判別するという方法を教えていただき、 4桁の数字以外が入力されたらエラーを表示することはできましたが、そうすると今度は計算がうまくいかなくなってしまいました。 例えば文字列としてscanf("%s",a);のようにして「1234」という文字列を入力し、これを「1234」という数値として扱うことはできませんか? または、strlen,isdigitを使わずに数値が4桁の整数であるかどうかを判別することはできませんか? もし良い方法をご存知の方いましたら、解説をお願いします。

  • 数字以外が入力されたらエラー文を出したい。

    scanfで数字を取り込みたいのですが、ここでaなどのアルファベットや記号を入力すると、無限ループが発生してしまいます。 エラーが出ないように、数字以外が入力されたら、エラーメッセージを出すようなプログラムを作りたいのですが、どうすれば出来るでしょうか。

  • セルの入力を半角数字8桁のみ入力したい

    セルに入力制限をかけるために 入力規則の設定から ユーザー設定を選択、 数式を  =EXACT(UPPER(A1),A1) (A1セルに設定する場合) と入力しています。 これにより文字の入力は防げましたが /や?などの記号は入力できてしまいます。 このような記号の入力を同時に防ぐことは出来るでしょうか? また、桁数は8桁のみの入力なのですが、 関数で【LENS】というのを使用すればよいみたいなのですが、 使い方がよくわかりません。 あわせてご教授いただければうれしいです。

  • 様々な桁の数字を、一様の桁になおす関数

    エクセル2010を使用しているものです。 現在各セルに様々な桁の数字が入力されています。 例    2012   354861   811021354   80011687   5447845   741741 これらの数字を、頭に0をつけて全て12桁に直したいです。 例だと、2012    →000000002012      354864   →000000354864      811021354 →000811021354 どのような関数を作ればこのような処理が一括でできるでしょうか?教えてください。よろしくお願いします。

  • LEFT関数のようなもの(7桁の数字から左の3桁の数字を抜き出す)

    はじめての質問です、よろしくお願いします。 ホームページでのアクセス制限を行うフリーcgiを修正・改造して、目的にかなうように作り替えたいのです。 このアクセス制限で行いたいのは  ・パスワードに7桁の数字を入力(例:1234567)  ・左の3桁(123)だけをパスワードリストに照合。 この「7桁の数字から左の3桁の数字を抜き出す」という部分にお手上げの状態です。 LEFT関数の様なもの、または、そのような処理をする方法について、アドバイスやヒントをお願い致します。 また、入力されたパスワードが7桁かどうかのチェック方法についてもよろしければアドバイス下さい。

    • ベストアンサー
    • Perl
  • 6ケタの数字の前に、「0」(ゼロ)をすべて入力する方法を教えてください

    6ケタの数字の前に、「0」(ゼロ)をすべて入力する方法を教えてください。数百件あるので、ひとつひとつ入力するのは気が遠くなります。一度で、すべての6ケタ数字の頭に「0」(ゼロ)を入力できる方法をお願いします。

  • 5桁の数字…

    初めての質問でここでいいのかわかりませんが、教えてください。 5桁の数字が2つあり、それぞれa[1]…a[5]、b[1]…b[5]に格納する。 対応する桁どうし(a[1]とb[1])を比較して一致する桁の個数を求めるプログラムを擬似コードで表したいのです。 { 2つの桁の数を配列a,bに読み込む; count=0; i=i+1; while(i<=5) { if(a[i]==b[i])(??); else 誤ったデータの処理; } countの値を出力する; } ??の部分には何をいれればよいでしょう? また他のところでも間違いがあればご指摘お願いいたします。

  • 【一太郎】縦書きで2桁の数字を入力させるには?

    一太郎で2桁の数字を一文字(?)として入力させるには どうすれば出来るのでしょうか? 例えば「平成15年」と入力したい場合,「15」を一文字分のスペースに入れたいのです。 が,普通に入力すると,「1」「5」年と別れてしまいます。 横書きなら問題ないのですが,縦書きでこのようになってしまうとかなりヘンです・・・。 縦書き入力で,2桁数字を横に数字が並んだような感じで,1文字にする方法を教えてください。 (分かりにくい説明ですみませんが・・・)

  • 数字を返す関数

    Excelの関数について教えてください。 「C12」→「012」 「C7」→「007」 というように、頭文字の「C」を取って残った数字部分を3桁で表示する方法について教えてください。 置換とか関数を使うのではないかと思いますが、関数一発とかでできなくても構いません。 例えば、まずアルファベットを取り払う過程を経た上で、残った数字を3桁で表示するといった方法でもいいです。 お手数おかけしますが、よろしくお願いします。

  • 数字を入力して配列に格納するプログラムを書きたいです。

    各行任意個の数字をスペースで区切って入力し、格納する数字は10個までとします。また、/の入力以降は数字を格納せず、プログラムを終了するようにしたいです。 PrintNumは配列に格納された数字を順番に印字する関数として、次のプログラムを書くと、数字を入力するとき、2行目を入力しようとするとエラーになってしまいます。 char line[50]; char *ptr; int count=0; int numbers[50]; while(*ptr!='/'){ fgets(line,50,stdin); ptr = strtok(line," "); if(ptr!=NULL && *ptr!='/') numbers[count++]=atoi(ptr); if(count>=10){ PrintNum(numbers,count); return 0; } while(ptr!=NULL && *ptr!='/'){ ptr=strtok(NULL," "); if(ptr!=NULL && *ptr!='/') numbers[count++]=atoi(ptr); if(count>=10){ PrintNum(numbers,count); return 0; } } } PrintNum(numbers,count); return 0; 最初のwhile文でたとえば while(1) とすると2行目以降も入力できることがわかったのですが、上のプログラムは何がまずいのかわかりません。教えていただけると幸いです。

専門家に質問してみよう