C 使用for循环和if语句打印语句

C 使用for循环和if语句打印语句,c,string,for-loop,C,String,For Loop,我需要确定用户输入是否为数字。我需要循环每个字符,检查是否所有字符都是数字,如果不是printf错误消息,或者是否成功。我使用for循环来循环每个字符,使用带有isdigit函数的if语句来检查数字。但我的问题是我打印每个字符。例如,如果我输入22A,我得到2和2的两条成功消息,然后我得到A的错误消息。但是我需要打印错误消息,因为22A不完全是数字 int n = strlen(argv[1]); for (int i=0; i<n; i++){ if (i

我需要确定用户输入是否为数字。我需要循环每个字符,检查是否所有字符都是数字,如果不是printf错误消息,或者是否成功。我使用for循环来循环每个字符,使用带有isdigit函数的if语句来检查数字。但我的问题是我打印每个字符。例如,如果我输入22A,我得到2和2的两条成功消息,然后我得到A的错误消息。但是我需要打印错误消息,因为22A不完全是数字

    int n = strlen(argv[1]);
    for (int i=0; i<n; i++){
        if (isdigit((int)argv[1][i]) == 0){
            printf("Error\n");
            return 1;
        }
        else{
            printf("Success\n");
            printf("%i\n", atoi(argv[1]));   
        }
    }

如果可以使用另一种方法,可以使用from string.h

strspn返回第一个参数字符串的初始段中的字节数,该段仅由字节f组成 rom第二个参数字符串,在本例中是数字

因此,如果strspn返回的值与字符串的长度相同,则该字符串没有非数字字符


strlen返回的不完全是int,而是size\u t。最好使用后者。请参阅。

您正在循环内打印成功,因此它仍然只是部分成功。@bruno:atol无法确定字符串是否为数字。它接受一个初始数字部分,并且不提供是否是整个字符串的指示。b即使是这样,它也不能满足规定的要求:“我需要循环每个…”目标不仅仅是将字符串转换为数字,而是执行一个练习,很可能是针对OP中是学生的班级。调用库例程无法教会如何使用所教的控制结构。@EricPostChil我想说的是strtol,这不是我第一次犯这种错误Damned在检查字符串中的所有字符之前,你不想打印成功,也就是说,在循环结束之前,您希望使用数字。当您说numeric时,您是将其限制为仅限数字,还是允许使用前缀分隔符、十进制分隔符,甚至可能是数千个分隔符?然后是需要担心的科学符号。请澄清一下,然后它就可以负责了。
size_t n = strlen(argv[1]);
if(strspn(argv[1], "0123456789")==n)
{
    printf("Success\n");
}
else
{
    printf("Error\n");
}