• 締切済み

非整数を入力したらエラーを表示させたいのですが・・・

入力値をnに格納し非整数を検出したときにエラー表示させたいのですが、処理に困っています。 if( (double)n || (char)n) printf("error\n"); だともちろん整数のときも無理になってしまいますし・・・。 小数点を検出したときはどのようにしたらよいのでしょうか?

みんなの回答

  • tig33
  • ベストアンサー率50% (6/12)
回答No.3

データの入力は、文字列になります。 まず入力バッファを用意しなければなりません。 #define BUFMAX (256) char inbuf[BUFMAX]; データをキーボードから入力するものとして、  printf("整数を入力してください。\n");  gets(inbuf); で、入力された文字列をチェックします。 整数と言うことは、文字が'0'~'9'でなければ、いけませんから、 #define FALSE (0) #define TRUE (1) int ok, ct, val;  ok = TRUE;  val = 0;  for(ct=0; (ct<BUFMAX && inbuf[ct]!='\0'); ct++) {    if( ('0'<=inbuf[ct]) && (inbuf[ct]<='9') ) {      val *= 10;      val += inbuf[ct] - '0';    } else {      ok = FALSE;      break;    }  }    if( ok ) {    printf("%sは整数です。 %d\n",inbuf, val);  } else {    printf("%s"は整数ではありません。\n", inbuf);  } こんな具合ですね。 なお、文字('0'~'9')のチェックは、標準関数の isdigit() を使っても良いでしょう。 質問の n は val におきかえてあります。 蛇足ながら、整数の桁数に対する注意が必要です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

お手軽には strtol.

  • alphion
  • ベストアンサー率19% (27/136)
回答No.1

たとえば、こんな感じでいかがでしょう? char n[256];//'n'って文字列ですよね? char workBuff[256]; int val; scanf("%s",n); val=atoi(n); sprintf(workBuff,"%d",val); if(strcmp(workBuff,n)==0) { //成功 }

chan-fu
質問者

補足

書き忘れていました; プログラムの意図としては整数値を入力して処理をしていくのですが、小数点が入った場合や文字列が入った場合にエラー表示させなければならないんです・・。

関連するQ&A

  • プログラムがエラーになってしまいます

    角錐の底面積と高さを整数値で入力し,その体積を小数点第1位まで表示する    角錐の体積は以下の式で求める    角錐の体積 = 底面積 * 高さ / 3  処理   底面積と高さを入力   底面積と高さがどちらも0より大きい値ならば   角錐の体積を求めて、表示する   どちらかが0以下ならば   "入力された値が正しくありません" のメッセージを出力する 底面積と高さはint型とする   体積はdouble型とする  イメージ   底面積 5  高さ 2 の時、体積は 3.3 と表示される という問題で僕は以下の様に作りました。#include <stdio.h> void main(void) { int teimennseki takasa; double taiseki printf("角錐の底面積を入力して下さい(整数値):"); scanf("%d",&teimennseki); printf("高さを入力して下さい(整数値):"); scanf("%d",&takasa); if (teimennseki <= 0 ){ printf("入力された値が正しくありません"); } else if (takasa <= 0 ){ printf("入力された値が正しくありません"); } else{ taiseki = teimennseki * takasa / 3.0 printf("底面積 %d 高さ %d の時、体積は %.1f\n",teimennseki,takasa,taiseki); } return 0; } すると、エラー7(記憶領域制御ブロックが壊れていました。) がでます。これはどういうエラーで、原因はどこでしょうか?

  • 入力された2つの整数の差を絶対値を出力するプログラム

    2整数の差を絶対値を出力するプログラムをつくりました. 入力される数値は、正数の場合は最大8桁まで有効とし、9桁目以降を無視、負数の場合は '-'を含め、最大9桁まで有効とし,10桁目以降を無視するようにしたい。 2番目の数値入力で9桁以降に数字以外の文字を入力すると,うまく動きません.なぜ動かないかとどのように直したらよいか教えてください. お願いします. #include <stdio.h> #include <stdlib.h> #define BUFFERSIZE 10 #define PLUS_MAX 8 #define MINUS_MAX 9 #define C_NULL ('\0') #define RC_OK 0 #define RC_ND -1 #define RC_ID -2 #define RC_MD -3 int absolute( int n1, int n2 ) ; main() { char n[ 2 ][ BUFFERSIZE ]; int i ; int a[ 2 ] ; int ab ; int count ; int n_pos ; char c ; for( i = 0 ; i < 2 ; i ++ ){ printf( "%d番目の数値 :", i + 1 ) ; for( count = 0 ; count <= BUFFERSIZE ; count ++ ){ c = getchar() ; if( c >= '0' && c <= '9' || count == 0 && c == '-' ){ n[i][ count ] = c ; continue ; } if( c == '\n' ) break ; printf( "Error!\n" ) ; return( RC_ID ) ; } if( count == 0 ){ printf("Error!\n"); return( RC_ND ); } else if( n[ i ][ 0 ] == '-' && count < 2 ){ printf("Error!\n"); return( RC_ID ) ; } if( n[ i ][ 0 ] == '-' && count > MINUS_MAX ){ n_pos = MINUS_MAX ; }else{ if( count > PLUS_MAX ){ n_pos = PLUS_MAX ; }else{ n_pos = count ; } } n[ i ][ n_pos ] = '\0' ; a[ i ] = atoi( n[ i ] ) ; } ab = absolute( a[ 0 ], a[ 1 ] ) ; printf( "絶対値は %d \n", ab ) ; return( RC_OK ); } int absolute(int n1, int n2) { int i ; i = n1 - n2 ; return i >= 0 ? i : -i ; }

  • C言語・標準入力でquitを入力で終わるプログラム

    C言語標準入力でquitを入力で終わるプログラムを作っているのですが うまくいきません #include <stdio.h> int main(void) { int i, n; double data[100]; printf("数字を入力してください。\n"); printf("入力を終えるときにはCtrl-dを押してください。\n"); n = 0; while (scanf("%lf", &data[n]) != EOF) { n++; } for (i=0; i<n; i++) { printf("data[%d] = %f\n", i, data[i]); } return (0); } と今はとりあえづ作ってみたのですが 今のままではCtrl-dでループから抜ける形になっています strcmp関数を使うとは思うのですが strcmp関数はchar型なのでエラーが出てしまいます; このやり方じゃないchar型にしてやり直さないといけないでしょうか; Linux CentOS gcc でやっています 標準入力で数字を入力しそれを格納 quitを入力するまで繰り返す quitを入力で終了、これまで格納していた文字列の表示 簡単なプログラムの流れとしては上記の感じです よろしくお願いします。

  • scanfに文字が入力されたときにエラー表示させる

    こんばんは.C言語勉強中です. 以下にsizeofを用いて各データタイプのサイズを表示させるプログラムを作りました.プログラム全文は下に貼付けました.これは,1-7までのいずれかの数字を入力すると,それに対応したサイズが表示されます.1-7以外の数字が入力されると,Type 1 - 7, please,と表示され,再び数字を入力出来ます.このプログラムは数字を入力している間はうまく機能していると思います. ただ,文字を入力すると無限ループに陥ってしまいます.僕は以下の scanf("%d",&typed); で10進数で読み込んで, if(typed<1 || typed >7) とすれば,文字も含めて全ての入力に対して排除できるかと思ったのですが,これではダメなようです. こういう場合,どうやって文字の入力に対するエラーを表示させるのが一般的なのでしょうか? 素人質問ですみません.よろしくお願いします. #include <stdio.h> #include <stdint.h> #include <Windows.h> int8_t main() { int typed; while(1) { while(1) { printf("Type the data type you wanna know the size of\n"); printf("char 1, short 2, int 3, long 4, long long 5, float 6, double 7: "); scanf("%d",&typed); printf("What you typed is %d\n",typed); if(typed<1 || typed >7) { printf("Type 1 - 7, please\n"); Sleep(1000); continue; } else { break; } } printf("Data size is "); switch(typed){ case 1: printf("%d\n",sizeof(char)); break; case 2: printf("%d\n",sizeof(short)); break; case 3: printf("%d\n",sizeof(int)); break; case 4: printf("%d\n",sizeof(long int)); break; case 5: printf("%d\n",sizeof(long long)); break; case 6: printf("%d\n",sizeof(float)); break; case 7: printf("%d\n",sizeof(double)); break; default: printf("Unexpected Value!\n"); break; } Sleep(2000); } return(0); }

  • 整数の表現について

    もし、数字が整数だった場合はこのA処理を もし、数字が小数点を含む数字だった場合はB処理をというようなIF文を作りたいのですが”整数” ”小数点” をどのように表現するのか解りません。 どうか教えて頂けないでしょうか。 又、違う表現等があった場合もあるのでしょうかお願します。

  • C#の整数値以外のエラー表示について

    現在C#のFizzBuzz問題に取り組んでいるのですが 5) nに数値以外の文字(例 abc)が入力された場合はエラーメッセージを表示しユーザに再入力させる。 という箇所が上手くいかず、どなたか教えて頂けないでしょうか? 『課題』 1) 1からnまで順に1行ずつ整数値を表示する。  2) nはユーザが入力する可変のパラメータとする。  3) 3の倍数の時は値の代わりにCUS、5の倍数はPIDEと表示する。  4) 3の倍数でもあり5の倍数でもある場合はCUSPIDEと表示する。 ---------- 応用問題 ~エラー処理~  1)~4)の実装が完了したら 5) にもチャレンジしてみましょう。  5) nに数値以外の文字(例 abc)が入力された場合はエラーメッセージを表示しユーザに再入力させる。 『ソースコード』 using System; namespace Ensyuu001 { class Program { static void Main(string[] args) { String s = ""; int enterNum = int.Parse(Console.ReadLine()); //if(enterNum != 1) Console.WriteLine("inputerror"); for (int n = 1; n <= enterNum; n++) { if (n % 3 == 0) s += "CUS"; if (n % 5 == 0) s += "PIDE"; if (s == "") s += n; Console.WriteLine(s); s = ""; } } } }

  • 最小の整数が,何番目に入力されたものかを出力したい

    先日、 「一つの整数をキーボードから入力する。これをn とする。続いてn 個の整数をキーボードから入力する(値は100 以下と仮定してよい)。その後、n 個の整数の中で最小のものを出力したい」 という質問をした者です。 今度は出力された最小の整数が,何番目に入力されたものか を出力したいのですが、どうすればいいですか? 困ってるんでお願いします。 ちなみに、前回の質問の答えはこうなりました。↓ #include <stdio.h> int main(void) { int n, i, t, min=0; scanf("%d",&n); for (i=0; i < n; i++){ scanf("%d",&t); if (i==0){ min=t; } if (min > t) { min=t; } } printf("\n最小:%d", min); return (0); }

  • C言語 エラー表示 break の位置が誤っている(関数 main ) 

    #include<stdio.h> int main(void){ int n,i,j,k; char c='*'; printf("正の整数:"); scanf("%d",&n); if(n>0){ for(i=1;i<=n;i++){ printf("%d",i); for(j=1;j<=n+1-i;j++){ if(j==1){ if(i-1>0){ for(k=i-1;k>0;k--){ printf(" "); } } } printf("%c",c); } printf("\n"); } } break; return 0; } これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか? 困ってます↓

  • コンパイルエラー

    Borlnd C++ compilerでコンパイルしたのですが、どうしてもエラーがでてしまいます。エラーは、不正な文字’’(0×8140)(関数 main) エラーE2206 文字' ' (0×8140)(関数 main) エラーE2206と二つ同じエラーがあると表示されます。本当に分からないので力を貸したください。お願いします。 /*読み込んだ二つの整数値の大きい方の値を求めて表示(条件演算子)*/ #include <stdio.h> int main(void) { int n1, n2, max; puts("二つの整数を入力してください。");   printf("整数1 : "); scanf("%d", &n1); printf("整数2 : "); scanf("%d", &n2); max = (n1 > n2) ? n1 : n2; printf("大きい方の値は%dです。\n", max); return 0;

  • コンパイル後アプリケーションエラー・・・

    #include<stdio.h> void main(void) { int n1, n2, sum; printf(\"整数n1を入力して下さい:\"); scanf(\"%d\", n1); printf(\"整数n2を入力して下さい:\"); scanf(\"%d\", n2); sum = n1 + n2; printf(\"n1とn2の合計は%dです\\n\", sum); } と入力しコンパイルしたらアプリケーションエラーとなりました。何が原因なのでしょうか? 本に書いてあるとおりに入力し、何度も見直したのですが… あとsum = n1 + n2と書いたのですが、sum=n1+n2でも問題はないのでしょうか? こんな初歩の初歩のことでスミマセン。 宜しくお願いします。

専門家に質問してみよう