如何防止用户只在C中的数组中键入空格

时间:2016-12-22 19:23:42

标签: c arrays string pointers char

我是C的新手,我目前正在处理数组函数。

有我的问题,我要求用户输入他的用户名,我想允许数字,字符和空格作为第一个字符。所以我创建了一个函数来阻止用户使用do-while循环来键入空格。 在第一次迭代中,如果我只有4个空格类型,'过滤器'可以完美地工作,但是如果我再次输入4个空格,那么函数考虑因为空间就好了。 这是代码:

void user_name (char *name) {
    int nb_space = 0;
    char buffer;
    do {
        printf("Player, please type your username \n");
        memset(name,'\0', sizeof(*name));
        scanf("%99[^\n]", name);// Using REGEX to prevent buffer issues with '\n'
        for(int i=0;i< sizeof(name);i++){
            if (name[i] == (char) ' '){
                nb_space++;
            }
        }
        while ((buffer = (char) getchar()) != '\n' ? buffer != EOF : false);//Using 'getchar' to empty the buffer 
    } while (nb_space == strlen(name));//I tryed to replace strlen with sizeof but nothing have changed
    first_maj(name);
}

还有来电者:

int main(int argc, char** argv){
    char name[100];
    user_name(name);
    printf("your name: %s\n",name);//to check what we got 
}

“first_maj”函数只是一个大写每个分隔单词的第一个字符的函数。这是我得到的输出(我用'。'代表空格:

Player, please type your username
....
Player, please type your username
....
your name: ....

程序应该一次又一次地询问,直到用户在4个空格后键入字符,或者直接键入字符。希望输出的例子(点=空格):

Player, please type your username
.....
Player, please type your username
...john.rambo
your name: ...John.Rambo

我的错误在哪里?我无法弄清楚这段代码中有什么问题。

编辑#1

如果找到我的错误很重要,那么这是大写函数“first_maj”:

void first_maj (char name[]){
    if (isalpha(name[0])){
        name[0]= (char) toupper(name[0]);
    }
    for(int i=1;i<strlen(name);i++){
        if (isalpha(name[i]) && name[i-1] == ' '){
            name[i] = (char) toupper(name[i]);
        }
    }
}

编辑#2

我的问题是关于迭代问题,不完全是数组的大小,但是谢谢你我能意识到其他错误。 在使用调试函数查看代码后,我终于发现了我正在寻找的错误:我只是忘了在循环中重新初始化nb_space:

void user_name (char *name, int length) {
        int nb_space;
        char buffer;
        do {
            nb_space = 0;
            printf("Player, please type your username \n");
            memset(name,'\0', sizeof(*name));
            scanf("%99[^\n]", name);// Using REGEX to prevent buffer issues with '\n'
            for(int i=0;i< sizeof(name);i++){
                if (name[i] == (char) ' '){
                    nb_space++;
                }
            }
            while ((buffer = (char) getchar()) != '\n' ? buffer != EOF : false);//Using 'getchar' to empty the buffer 
        } while (nb_space == strlen(name));//I tryed to replace strlen with sizeof but nothing have changed
        first_maj(name);
    }

0 个答案:

没有答案