以下は、コンソールからの整数入力を受け入れる単純なコードです。無効な(非整数)入力が与えられるまでは正常に機能します。
1 #include <stdio.h>
2
3 int main()
4 {
5 int x = 0;
6 int inp = 0;
7 int nums[20];
8 int idx = 0;
9 for(;;){
10 printf("Enter an integer: ");
11 inp=scanf("%d", &x);
12 if(inp == 0){
13 printf("Error: not an integer\n");
14 }
15 else{
16 if(idx<20){
17 nums[idx] = x;
18 idx++;
19 }
20 }
21 }
22 return 0;
23 }
これは、値「g」を入力した後にプログラムをステップ実行することを示す gdb からの出力です。18 行目にジャンプし、その後ユーザーからの入力を探すのに失敗する様子を見てください。
Starting program: /Users/jeffersonhudson/xxxx/hw1
Enter an integer: g
Breakpoint 1, main () at hw1.c:12
12 if(inp == 0){
(gdb) n
13 printf("Error: not an integer\n");
(gdb) n
Error: not an integer
0x0000000100000ee4 18 idx++;
(gdb) n
10 printf("Enter an integer: ");
(gdb) n
11 inp=scanf("%d", &x);
(gdb) n
Breakpoint 1, main () at hw1.c:12
12 if(inp == 0){
(gdb)
これは、間違った入力を与えた後のプログラムの出力です。
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
Enter an integer: Error: not an integer
^C
誰かが私がここで間違っていることを理解するのを手伝ってもらえますか?