C++(数组)输入个十进制字符串,将其转化成一个10进制有符号整数,否则报错

用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去判断就好

img

#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;
}

如有帮助,还请采纳!谢谢!