我在C以下代碼:Ç - 整數輸入驗證碼
#include "stdafx.h"
#include <stdlib.h>
#include <cstring>
#include <ctype.h>
int main()
{
char buffer[20];
int num;
bool valid = true;
printf("Please enter a number\n");
fgets(buffer, sizeof(buffer), stdin);
printf("\n\n");
if(!isdigit(buffer[0])) //Checking if the first character is -
{
if(buffer[0] != '-')
{
valid = false;
}
else
{
if(!isdigit(buffer[1]))
{
valid = false;
}
}
}
char *pend = strrchr(buffer, '\n'); //Replacing the newline character with '\0'
if (pend != NULL)
{
*pend = '\0';
}
for (int i = 1; i < strlen(buffer); i++) //Checking that each character of the string is numeric
{
if (!isdigit(buffer[i]))
{
valid = false;
break;
}
}
if(valid == false)
{
printf("Invalid input!");
}
else
{
num = atoi(buffer);
printf("The number entered is %d", num);
}
getchar();
}
基本上,代碼確保用戶輸入是正或負的整數。不允許使用字母,浮點數等。
該代碼完美工作,並很好地工作。
但是,代碼太長,我必須在很多程序中實現它。有沒有一種簡單的方法在C中執行所有上述操作?也許這確保輸入是更短的替代:
ⅰ)不是字母 ⅱ)的正或負整數
把它放在一個可重用的函數中。將該文件包含在各個項目中。你可能會縮小代碼,但是當顯而易見的解決方案是使你可以重用時,我懶得去讀它。 – evanmcdonnal 2013-03-05 20:22:07
使用標準庫。 'strtol'完成了所有這些。 – 2013-03-05 20:22:39
@ n.m。 'strtol()'不會正確返回錯誤。 – 2013-03-05 20:24:48