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