1. 程式人生 > >在迴圈中的scanf()不被執行面陷入死迴圈

在迴圈中的scanf()不被執行面陷入死迴圈

今天好蠢,之前忙於應付期末考試編個小程式手都生了,

scanf("%d",&p->num);寫成了scanf("&d",&p->num);

【當時還以為是結構體的問題呢= =】

還有,scanf裡的“”中間的部分並不會給你檢錯!!!

原因:

'&d'並不是一個符合scanf格式化的一個輸入,因為格式化要求輸入一個“&d”,所以輸入成功的個數就0,也就是scanf返回值=0

此時程式進入下一個迴圈由於上次的'a'並不符合格式化輸入,所以'a'被緩衝,放到下一個scanf輸入中,此時'a'又不符合規定,就進入下一個迴圈,這樣就形成了死迴圈

下面這段程式碼摘自:http://bbs.csdn.net/topics/390385703

#include<stdio.h>
int main(void)
{
	int i;
	int b = 1;
	while (b)
	{
		int c;
		c = scanf("%d", &i); 
		/* 當你輸入一個字元,如:'a'時,此時'a'並不是一個符合scanf格式化的一個輸入,
		因為格式化要求輸入一個整數,所以輸入成功的個數就0,也就是c=0
		此時程式進入下一個迴圈,由於上次的'a'並不符合格式化輸入,
		所以'a'被緩衝,放到下一個scanf輸入中,
		此時'a'又不符合規定,就進入下一個迴圈,這樣就形成了死迴圈*/
		printf("%d\n", c);
		if (c == 1)
			b = 0;
		else
			printf("your input wrong,you can input only a charactr,try again\n");
	}
	printf("the num is:%d", i);
	return 0;
}