簡體   English   中英

如何使迭代isalpha函數的函數起作用?

[英]How to make a function that iterates an isalpha function work?

我有一個程序,使用isalpha比較字符串中的每個元素。 我輸入了一個字符串,它調用該函數以遍歷數組並檢查所有字符是否都是字母。 如果是,則輸出true和false。 我的問題是我似乎無法使其正常工作。 每次只會返回false。

#include <stdio.h>
#include <string.h>

int isAlpha(char string[]);

int main()
{
    char str[100];
    int bool;

    printf("Enter a string to check: \n");
    fgets(str, 100, stdin);

    bool = isAlpha(str);
    if(bool != 0)
    {
        printf("True\n");
    }
    else if(bool == 0)
    {
        printf("False\n");
    }
    return 0;   
}

int isAlpha(char string[])
{
    int i, check, len = strlen(string);
    for(i = 0; i < len; i++)
    {
        if(isalpha(string[i]))
        {
            check = 1;
        }
        else
        {
            check = 0;
            break;
        }
    }
    return check;
}

如果用戶輸入abc ,則從fgets返回的字符串將為abc\\n\\0 換句話說,換行符始終無法通過isalpha測試。 您可以通過從字符串長度中減去一個來解決此問題。 您還應該初始化check變量,因為循環的主體可能永遠不會運行,例如,如果用戶在不鍵入任何內容的情況下按下Enter鍵。

int i, check = 0;
int len = strlen(string) - 1;
for(i = 0; i < len; i++)

正如@ShadowRanger在注釋中指出的那樣,C語言中沒有簡單的事情。為了絕對安全,您應該從字符串中刪除換行符,如下所示

int i, check = 0;
string[strcspn(string, "\n")] = '\0';
int len = strlen(string);
for(i = 0; i < len; i++)

嘗試這個

int isAlpha(char string[])
{
    int i = 0, len = strlen(string);
    for(i = 0; isalpha(string[i]); i++); // cycle through string until characters are alphabet characters

    return i == len - 1;
    /* this has to be true if all characters are alpha */
}

要解決您的問題,請執行以下操作:

for(i = 0; i < len - 1; i++)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM