###前提・実現したいこと
数字のみを読み込ませる処理を行いたい
###発生している問題・エラーメッセージ
ループの一回目は文字をはじくのですが、1度でも数字が通ると、
その後は文字も通してしまいます。
ステータス入力関数の下です。
###該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3 4//ステータス構造体 5typedef struct{ 6 char name[256]; 7 int HP; 8 int AP; 9 int DP; 10 int EP; 11 } player; 12 13//プロトタイプ宣言 14void InputStatus(player *data); 15void ViewStatus(player data); 16 17//メイン関数 18int main() 19{ 20 player data; 21 InputStatus(&data); 22 ViewStatus(data); 23 24 return 0; 25} 26 27//ステータス入力関数 28void InputStatus(player *data) 29{ 30 31 printf("名前を入力して下さい\n<"); 32 scanf("%s",data->name); 33 while(1){ 34 do{ 35 printf("パラメータ:300を HP、AP、DP、EP(回避)にそれぞれ振り分けて下さい。\n"); 36 printf("※EPの上限は40です。\n"); 37 printf("HP = "); 38 scanf("%d",&data->HP); 39 rewind(stdin); 40 }while(data->HP < 0 || data->HP > 300); 41 do{ 42 printf("AP = "); 43 scanf("%d",&data->AP); 44 rewind(stdin); 45 }while(data->AP < 0 || data->AP > 300); 46 do{ 47 printf("DP = "); 48 scanf("%d",&data->DP); 49 rewind(stdin); 50 }while(data->DP < 0 || data->DP > 300); 51 do{ 52 printf("EP = "); 53 scanf("%d",&data->EP); 54 rewind(stdin); 55 }while(data->EP < 0 || data->EP > 40); 56 printf("\n"); 57 if(data->HP + data->AP + data->DP + data->EP > 300){ 58 printf("パラメータ合計が300を超えています。もう一度入力して下さい。\n\n"); 59 continue; 60 } 61 if(data->HP + data->AP + data->DP + data->EP < 300){ 62 printf("パラメータ合計が300に達していません。もう一度入力して下さい。\n\n"); 63 continue; 64 } 65 else if(data->HP + data->AP + data->DP + data->EP == 300){ 66 break; 67 } 68 } 69} 70 71 72//ステータス表示関数 73void ViewStatus(player data) 74{ 75 printf("名前:%s\n",data.name); 76 printf(" HP :%d\n",data.HP); 77 printf(" AP :%d\n",data.AP); 78 printf(" DP :%d\n",data.DP); 79 printf(" EP :%d\n",data.EP); 80 printf("\n"); 81}
###試したこと
gets、isdigit等調べてみたのですが、自分の力ではなんとも使うことが出来ずにいます。
どうすれば解決するか教えていただけないでしょうか、お願いします。
プログラムは、インデントをつけて、```C と ```の行の間に書いてください。