C言語関係掲示板

過去ログ

No.1297 改行を押すと「error!!」出し、プログラムを終了させる処理

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

改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---レイ(2004/10/17 21:30:06)


はじめまして。ちょいとC言語を齧っている者です。

質問なのですが、ちょっとした問題のプログラムを作成中、改行(エンター)を押した際に「error!!」という文字を表示させてプログラムを終わらせたいのですが、どうにも上手くいきません。
int型配列変数に初期値を持たせても上手くいきませんでした。
下にプログラムを表示します。

#include <stdio.h>

main()
{ 
    int a;
    int str[3]; 

    str[0] = -1; 
    str[1] = -1; 
    str[2] = -1; 

    for (a=0; a<3; a++){
        printf("str[%d]:", a); 
        scanf("%d", &str[a]);

            if (str[a] == -1){
            printf("error!!\n"); 
            break; 
            }

        while (str[a]>100000000){
                str[a] = str[a]/10; 
            }
            if (str[a]<0){
            printf("error!!\n"); 
            break; 
            }

        }
        if (str[2]>=0){
        printf("3つの整数和は%d\n", str[0]+str[1]+str[2]); 
        }
        return(0);
}


どうすればエンターを押した際に「error!!」を出して終了させることが出来るでしょうか?
誰かご教授いただけるとありがたいです。


No.17355

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---五男(2004/10/17 21:35:00)


またまたかなり初心者のコードですねw
私も初心者なので頑張りますw



No.17356

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---やすこ(2004/10/17 22:22:33)


あなたのプログラムをちょっといじるとこんな感じになるのでは

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{ 
  int a;
  int str[3]; 
  char buf[50];
  for (a=0; a<3; a++){
    printf("str[%d]:", a); 
    fgets(buf,50,stdin);
    if(strcmp(buf,"\n")==0){
      printf("error!!\n"); 
      return 1;
    }
    str[a]=atoi(buf);
    while (str[a]>100000000){
      str[a] = str[a]/10; 
    }
    if (str[a]<0){
      printf("error!!\n"); 
      return 1; 
    }
  }
  if (str[2]>=0){
    printf("3つの整数和は%d\n", str[0]+str[1]+str[2]); 
  }
  return(0);
}





No.17359

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---レイ(2004/10/18 02:41:30)


やすこさん、ご教授の程ありがとうございました。
#include <stdlib.h>
を使うことになるとは……。
もっと勉強してきます。


No.17394

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---レイ(2004/10/19 11:51:10)


あれから多少変更したのですが、今度はstr[1]が2桁以上の数、str[2]が3桁以上の数でなければ「error!!」と出てしまうようになりました。
(str[1]が1、str[2]が23などで何故か終了してしまう)

下にプログラムを載せます。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{ 
    int a;
    int str[3]; 
    char buf[50];

        for (a=0; a<3; a++){                    /*a=0とし、aが3を超えるまで処理をする*/
            printf("str[%d]:", a); 
            fgets(buf,50,stdin); 

                if( strcmp(buf,"\n") == 0){  /*bufに改行を入力した場合、1行下のprintfに進む*/
                    printf("error!!\n"); 
                    return 1; 
                }
                
                if ('0' > buf[a] || '9' < buf[a]){  /*bufに0よりも小さい、もしくは9よりも大きい文字コードが入力された場合、下のprintfに進む*/
                    printf("error!!\n"); 
                    return 1; 
                }

                str[a]=atoi(buf);

                while (str[a]>100000000){      /*str[a]が9桁以上の場合、10で割る*/
                str[a] = str[a]/10; 
                }

                if (str[a]<0){          /*str[a]が負の数の場合、1行下のprintfに進む*/
                    printf("error!!\n"); 
                    return 1; 
                }

            }
            if (str[2]>=0){      /*str[2]が0以上の場合、1行下のprintfに進む*/
                printf("3つの整数和は%d\n", str[0]+str[1]+str[2]); 
            }

        return(0); 
}



どうやったらstr[1]、str[2]が一桁でもプログラムが進む(残る)ようになるでしょうか?
どなたかご教授のほどお願いいたします。


No.17395

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---επιστημη(2004/10/19 12:27:03)


>あれから多少変更したのですが、今度はstr[1]が2桁以上の数、str[2]が3桁以上の数でなければ「error!!」と出てしまうようになりました。

単に error!! と書くんじゃなくて、 error-1 とか error-2 とかメッセージを変え、どこで抜け出してるか調べるのが先決。



No.17403

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---ホワイト(2004/10/19 13:17:52)


if ('0' > buf[a] || '9' < buf[a]){
     printf("error!!\n"); 
     return 1; 
}



ここの部分をもう一度よく考えてみてください。


No.17404

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---ken(2004/10/19 13:27:49)


ここがおかしい

if ('0' > buf[a] || '9' < buf[a])

これではbuf[a]に入ってる1文字しかチェックしてないことになります
a = 1 の時に1桁しか入力されてなかったりしたらエラーになりますよ

他にも方法があるかもしれませんが、この場合、
文字列の最初から最後までisdigit()で1文字ずつチェック
するのがわかりやすいでしょう



No.17417

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---レイ(2004/10/20 00:51:49)


色々考えたのですがどうにも上手く作成できません。
どなたか教えてはいただけないでしょうか……。


No.17418

Re:改行を押すと「error!!」出し、プログラムを終了させる処理
投稿者---かずま(2004/10/20 02:45:54)


#include <stdio.h>

int main(void)
{ 
    int i;  int str[3];  char buf[256];

    for (i = 0; i < 3; i++) {
        printf("str[%d]:", i); 
        if (fgets(buf, sizeof buf, stdin) == NULL ||
                sscanf(buf, "%d", &str[i]) != 1 || str[i] < 0) {
            printf("error!!\n");
            return 1;
        }
        while (str[i] > 100000000) str[i] /= 10; 
    }
    printf("3つの整数和は %d\n", str[0] + str[1] + str[2]); 
    return 0; 
}