*編寫一個函數給一個變量賦值,如果賦值失敗(值會依然留在緩衝區),丟棄該輸入行的
所有剩餘內容,並要求重新給這個變量賦值。
代碼如下:
int right_num()
{
int number;
while((scanf("%d", &number)) != 1)
{
while (getchar() != '\n')
continue;
printf("Please enter number again");
printf(" not alphy.\n");
}
return number;
}
也可一個把輸入的錯誤的數打印出來告訴用戶
代碼如下:
int right_num()
{
int number;
while((scanf("%d", &number)) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch);
printf(" is not right.\n");
printf("Please enter right number");
printf(" not alphy.\n");
}
return number;
}
*讀取一行中的第一個字符並丟棄剩餘的部分(包括回車也丟掉,主要就是想丟回車)。
代碼如下:
char get_first()
{
char ch;
ch = getchar();//接收第一個字符
while ((getchar()) != '\n')
continue;//跳過該行剩下的內容
return ch;
}
讀取一行字符串,可讀取第一個非空格字符前的空格,不包括末尾的回車
n是包括末尾的空字符在內的最大字符數。
char * s_gets(char * st, int n)
{
int i = 0;
char * fir_address;
fir_address = fgets(st, n, stdin);
while (st[i] != '\n' && st[i] != '\0')
i++;//如果輸入的字符數小於n-1,最後一位字符是‘\0’(空字符是自動補充的),倒數第二位是‘\n’,遍歷先遇到‘\n’;如果輸入的字符數大於等於n-1,最後一位字符數是‘\0’(空字符是自動補充的),倒數第二位是輸入的正常字符
if (st[i] == '\n')
st[i] = '\0'//把回車消除掉
else// 此時st[i] == '\0',下面的語句是把多出來的字符消除掉
while (getchar() != '\n')
continue;
return fir_address;
}