Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对字符串输入进行迭代_C_Validation_Input_Integer_Fgets - Fatal编程技术网

C 对字符串输入进行迭代

C 对字符串输入进行迭代,c,validation,input,integer,fgets,C,Validation,Input,Integer,Fgets,我试图对字符串进行迭代,以查看输入是否为整数 代码如下: 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(v

我试图对字符串进行迭代,以查看输入是否为整数

代码如下:

 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);
    }
for(int i=1;i
问题是,即使输入是正确的,比如说2,输出消息仍然是“无效输入!”

我现在很沮丧。我已尝试使用atoi函数、strtol函数和其他方法,以便验证数字并确保:

1) 这不是一封信 2) 这是一个整数


请帮帮我。我已经尝试解决这个问题两个多小时了。

因为
fgets
读取一行,所以
'\n'
(不是数字)可能会保留在字符串的末尾。您可以删除它:

#include <string.h>

char *pend = strrchr (buffer, '\n');

if (pend != NULL) *pend = '\0';
#包括
char*pend=strrchr(缓冲区“\n”);
如果(pend!=NULL)*pend='\0';

您需要发布isdigit代码。isdigit是ctype.h库提供的一种方法。我不是自己创建的这显然不是太本地化。代码片段很明显,但输出却出乎意料。阅读
man
页面会有所帮助。除了学习如何使用调试器,它仍然是
intmain(void)
。非常感谢Kirilenko:))它完全解决了问题。代码到底在做什么。是否将\n替换为\0?非常感谢。因此,pend是指向空终止字符的数据指针,如果pend不是空(找到空终止字符),它将用\0替换它?它将用
\0
替换字符串的最后一个换行符。如果找不到换行符,取消引用
pend
将导致未定义的行为,因此我们避免这种情况。再次感谢:)如果我问这样的问题,我很抱歉,但我对C有点陌生。@Matthew:不必道歉。如果这个问题问得好,我很乐意回答