回答編集履歴

2 コード中の誤字修正

kazuma-s

kazuma-s score 5551

2020/07/28 11:01  投稿

[要求] には「エラーメッセージがでる」とあるだけで、再入力は要求していません。
次のコードでよいのではありませんか?
```C
#include <stdio.h>
int main(void)
{
   int n1, n2;
   printf("数値1=");
   if (scanf("%d", &n1) != 1 || n1 < 1 || n1 > 100) {
       puts("エラーです、1から100までの整数が入力されませんでした。");
       return 1;
   }
   printf("数値2=");
   if (scanf("%d", &n2) != 1 || n2 < 1 || n2 > 100) {
       puts("エラーです、1から100までの整数が入力されませんでした。");
       return 1;
   }
   printf("数値1は=%d\n", n1);
   printf("数値2は=%d\n", n2);
   return 0;
}
```
また、「scanf関数は使えません。」と間違ったことを言っている人がいるので
再入力を scanf だけで実現する例を示します。
```C
#include <stdio.h>
int main(void)
{
   int n1, n2;
   while (1) {
       printf("数値1=");
       if (scanf("%d", &n1) == 1 && n1 >= 1 && n1 <= 100) break;
       scanf("%*[^\n]");
       puts("エラーです、1から100までの整数を再入力してください");
   }
   while (1) {
       printf("数値1=");
       printf("数値2=");
       if (scanf("%d", &n2) == 1 && n2 >= 1 && n2 <= 100) break;
       scanf("%*[^\n]");
       puts("エラーです、1から100までの整数を再入力してください");
   }
   printf("数値1は=%d\n", n1);
   printf("数値2は=%d\n", n2);
   return 0;
}
```
**追記**
実は上記の 2つのコードは完璧ではありません。
7 と 3.14 を入力すると 7 と 3 が入力されたものとしてエラーメッセージを出しません。
もちろん、解決策はあります。
1 補足説明の追加

kazuma-s

kazuma-s score 5551

2020/07/28 10:50  投稿

[要求] には「エラーメッセージがでる」とあるだけで、再入力は要求していません。
次のコードでよいのではありませんか?
```C
#include <stdio.h>
int main(void)
{
   int n1, n2;
   printf("数値1=");
   if (scanf("%d", &n1) != 1 || n1 < 1 || n1 > 100) {
       puts("エラーです、1から100までの整数が入力されませんでした。");
       return 1;
   }
   printf("数値2=");
   if (scanf("%d", &n2) != 1 || n2 < 1 || n2 > 100) {
       puts("エラーです、1から100までの整数が入力されませんでした。");
       return 1;
   }
   printf("数値1は=%d\n", n1);
   printf("数値2は=%d\n", n2);
   return 0;
}
```
また、「scanf関数は使えません。」と間違ったことを言っている人がいるので
再入力を scanf だけで実現する例を示します。
```C
#include <stdio.h>
int main(void)
{
   int n1, n2;
   while (1) {
       printf("数値1=");
       if (scanf("%d", &n1) == 1 && n1 >= 1 && n1 <= 100) break;
       scanf("%*[^\n]");
       puts("エラーです、1から100までの整数を再入力してください");
   }
   while (1) {
       printf("数値1=");
       if (scanf("%d", &n2) == 1 && n2 >= 1 && n2 <= 100) break;
       scanf("%*[^\n]");
       puts("エラーです、1から100までの整数を再入力してください");
   }
   printf("数値1は=%d\n", n1);
   printf("数値2は=%d\n", n2);
   return 0;
}
```
```
**追記**
実は上記の 2つのコードは完璧ではありません。
7 と 3.14 を入力すると 7 と 3 が入力されたものとしてエラーメッセージを出しません。
もちろん、解決策はあります。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る