用C++定义一个字符数组char str[80]。输入一个10进制字符串(以回车结束),将其转换为10进制有符号整数,如果输入的数据错误则报错。
如:输入字符串156或+156,转换为整型156输出。输入字符数组-156,转换为整数-156输出。如输入字符串12.33(只要含有非0~9,及+、-号不在第一个字符。)则报错,输出提示“输入错误!”。允许输入前导空格处理时能够自动忽略。
遍历字符串,开头的空格过滤掉,开头的+或-号转为正负,后面如果有小数点也算错。然后遇到数字字符减去'0'
#include<iostream>
using namespace std;
int main()
{
char str[80];
gets(str);
int i=0;
int n=0;
int f=0;
int flag = 1;
while(str[i] != '\0')
{
if(f==1)
{
if(str[i] < '0' || str[i] > '9')
break;
}
else
{
if(str[i] == '+' || str[i] == '-' || str[i] == ' ')
{
if(str[i] == '-')
flag *= -1;
i++;
continue;
}
if(str[i] < '0' || str[i] > '9')
break;
f=1;
}
n = n*10 + str[i] - '0';
i++;
}
if(str[i] == '\0')
printf("%d",n);
else
printf("输入错误!");
return 0;
}
atoi函数,注意超过int大小要自己处理。如果要实现判断非法字符,随便写个if else去判断就好
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
while (1) {
printf("Input a integer:");fflush(stdout);
rewind(stdin);
fgets(s,80,stdin);
if (strlen(s)>10) {
printf("Input too long(>9)!\n");
continue;
}
if (2==sscanf(s,"%d%c",&i,&c)) {
if ('\n'==c) {
printf("%d is a integer.\n",i);
break;
}
}
if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
printf("\"%s\" is NOT a integer!\n",s);
}
return 0;
}
如有帮助,还请采纳!谢谢!