2013-03-05 102 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