2013-03-05 96 views
2

我想遍历字符串以查看输入是否是整数。对字符串输入进行迭代

这是代码:“无效的输入”

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

的问题是,即使输入是正确的,我们可以说2,输出消息还在。

我现在非常沮丧。

1)它不是一个字母 2)它是一个整数

请帮助:我已经使用的atoi功能,strtol函数等方法,这样我可以验证数字,并确保试我。我一直试图解决这个问题超过2个小时。

+0

您需要发布您的代码ISDIGIT的 – 75inchpianist 2013-03-05 18:05:48

+0

是ISDIGIT由文件ctype.h库提供了一种方法。我没有自己创建它 – Matthew 2013-03-05 18:07:09

+0

这显然是**不** *太本地化*。代码片段很明显,但输出却是意想不到的。 – Lion 2013-03-05 18:11:22

回答

8

由于fgets读取一行,因此'\n'(不是数字)可能会保留在字符串的末尾。你可以将其删除:

#include <string.h> 

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

if (pend != NULL) *pend = '\0'; 
+0

非常感谢你Kirilenko :)))它完全解决了这个问题。什么是代码的确切做法。它是否用\ 0代替\ n? – Matthew 2013-03-05 18:11:28

+0

是的。 :-) – md5 2013-03-05 18:11:44

+0

非常感谢。所以pend是一个指向null结尾字符的数据指针,如果pend不是null(找到null结束字符),它将用\ 0替换它? – Matthew 2013-03-05 18:12:40