C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C# 初心者


(過去ログ 84 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■50166 / inTopicNo.1)  C# 初心者
  
□投稿者/ ピータン (1回)-(2010/05/29(Sat) 22:48:20)

分類:[C/C++] 

最近、C言語を勉強し始めました。簡単な質問ですみませんが、お答えいただけるとありがたいです。
if文を使って、メタボの診断をするプログラムを作る課題に取り組んでいます。
メタボの条件として男性ならウエスト85cm以上、女性ならウエスト90cm以上でメタボと診断されるプログラムを作るつもりです。
簡単なものなのですが、ウエストを入力するときに数字ではなくアルファベットや記号を入力しても、if・else ifで分別されてしまいます。アルファベットや記号が入力されたら、正しく入力しなおさせるようにしたいのですがどうすればいいでしょうか?

#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 256

int main(void);

int main(void)
{
char buf1[MAXLINE];
char buf2[MAXLINE];

int g, w; //gender,waist

printf("あなたの性別を番号で入力してください。\n");
printf("(1)男\n(2)女\n");
gets(buf1);
g = atoi(buf1);
if(g==1){
printf("ウェストサイズを入力してください。\n");
gets(buf2);
w = atoi(buf2);
if( w>=85 ){
printf("メタボかもしれません。\n");
}
else if( w<85){
printf("メタボではないです。\n");
}
else{
printf("正しい数字を入力してください");
}
}
else if(g==2){
printf("ウェストサイズを入力してください。\n");
gets(buf2);
w = atoi(buf2);
if( w>=90 ){
printf("メタボかもしれません。\n");
}
else if(w<90){
printf("メタボではないです。\n");
}
else{
printf("正しい数字を入力してください。");
}
}
else{
printf("1か2で入力してください。");
}
return(0);
}

引用返信 編集キー/
■50169 / inTopicNo.2)  Re[1]: C# 初心者
□投稿者/ επιστημη (2502回)-(2010/05/30(Sun) 00:46:05)
επιστημη さんの Web サイト
2010/05/30(Sun) 00:48:40 編集(投稿者)
/*
 * なんかひっさしぶりにCで書くなー...
 */
#include <stdio.h>
#include <stdlib.h>

#define MAXLINE 256

int main(void) {
  char buf[MAXLINE];
  int metabo_guideline;
  int waist;

  metabo_guideline = -1;
  printf("あなたの性別を番号で入力してください。\n");
  do {
    printf("(1)男 / (2)女\n");
    gets(buf);
    switch ( buf[0] ) {
    case '1' : metabo_guideline = 85; break;
    case '2' : metabo_guideline = 90; break;
    default  : printf("1か2で入力してください。\n");
    }
  } while ( metabo_guideline < 0 );

  printf("ウェストサイズを入力してください。\n");
  do {
    gets(buf);
    waist = atoi(buf);
    if( waist >= metabo_guideline ) {
      printf("メタボかもしれません。\n");
    }
    else if( waist > 0 && waist < metabo_guideline ) {
      printf("メタボではないです。\n");
    }
    else{
      printf("正しい数字を入力してください。");
    }
  } while ( waist <= 0 );
  return 0;
}

それはそうとして、タイトルに「C#初心者」はねーだろ

引用返信 編集キー/
■50183 / inTopicNo.3)  Re[2]: C# 初心者
□投稿者/ ピータン (2回)-(2010/05/30(Sun) 11:40:23)
No50169 (επιστημη さん) に返信
ありがとうございます。参考にさせていただきます。
タイトル変でしたね。もっと具体的に書かなければいけないしC#じゃなくてCですしね。

解決済み
引用返信 編集キー/
■50185 / inTopicNo.4)  Re[1]: C# 初心者
□投稿者/ .SHO (1343回)-(2010/05/30(Sun) 13:16:04)
No50166 (ピータン さん) に返信

> 簡単なものなのですが、ウエストを入力するときに数字ではなくアルファベットや記号を入力しても、if・else ifで分別されてしまいます。アルファベットや記号が入力されたら、正しく入力しなおさせるようにしたいのですがどうすればいいでしょうか?

atoiが「数字以外の文字が出現するまでを変換する」という仕様だからです。
atoiを実施する前に、自分で判断してください。
もしくは、atoiの結果をもう一度文字列に戻し、入力された文字と同じか比較するというのでも可能です。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -