如題,想請問有辦法達成這件事嗎?
上網找只有找到防止加減乘除發生溢位,但沒有看到有關防止輸入溢位的文章
以下是簡短的程式碼
#include <stdio.h>
#include <stdint.h>
int main()
{
uint32_t number = 0;
printf("Please enter a number:");
scanf("%d",&number);
...
return 0;
}
你不覺得,你玩的game, 應用程式之類的,不會讓你想輸入什麼就輸入什麼嗎?
這些「嚴謹」的程式,不會使用 scanf() 來讀 user 的資料的。了解嗎?
因為 scanf() 在讀入 user 資料的那當下,你程式是無法做到:
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/* reads from keypress, doesn't echo */
int getch(void)
{
struct termios oldattr, newattr;
int ch;
tcgetattr(STDIN_FILENO, &oldattr);
newattr = oldattr;
newattr.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newattr);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldattr);
return ch;
}
void main(){
int x;
char s[20]={0}, c;
int i=0;
printf("Please enter a number:");
while(1){ // 這個迴圈就是用來取代 scanf()
c = getch();
if (c >= '0' && c <= '9'){ // 如果按的是 0~9
s[i++]=c;
putchar(c);
} else if (c == '\n'){ // 如果按的是 [Enter]
printf("\n\n");
break;
}
x = atoi(s); // 每按一次就檢查一次有沒有超過你設定的最大值。例如99999
if (x > 99999){
printf("\nOverflow!\n"); // 超過就顯示溢位
break; // 我這邊範例是直接中止,但你可以再繼續偵測是否用倒退來刪除或其他鍵做特別處理
}
}
printf("Finish.\n");
}