【发布时间】:2017-07-25 05:48:29
【问题描述】:
您好,我是 C 的新手,我正在尝试使用下面的字符数组类型来捕获用户的输入。我如何防止或转义数字字符。我只想捕获字符串。
char str_input[105];
在尝试过
scanf("%[^\n]s",str_input);
scanf("%[^\n]",str_input);
scanf("%[^0-9]",str_input);
scanf("%[A-Zaz-z]",str_input);
str_input = fgetc(stdin);
以上都不适合我。
输入
2
黑客
预期输出
Hce akr
int main() {
char *str_input;
size_t bufsize = 108;
size_t characters;
str_input = (char *)malloc(bufsize * sizeof(char));
if (str_input == NULL)
{
perror("Unable to allocate buffer");
exit(1);
}
characters = getline(&str_input,&bufsize,stdin);
printf("%zu characters were read.\n",characters);
int i;
int len = 0;
for (i = 0, len = strlen(str_input); i<=len; i++) {
i%2==0? printf("%c",str_input[i]): 'b';
}
printf(" ");
for (i = 0, len = strlen(str_input); i<=len; i++) {
i%2!=0? printf("%c",str_input[i]): 'b';
}
return 0;
}
错误
solution.c: In function ‘main’:
solution.c:21:5: warning: implicit declaration of function ‘getline’ [-Wimplicit-function-declaration]
characters = getline(&str_input,&bufsize,stdin);
【问题讨论】:
-
使用
-来表示字符范围是实现定义的特性。 -
通常你首先得到输入然后扫描它。
fgetc得到一个字符,但您似乎想要一个字符串。我进一步了解您想拒绝输入数字。这意味着告诉用户类似Wrong input. Please re-enter的信息,这意味着一个循环,直到你得到正确的输入。 -
@PaulOgilvie 是的,我尝试了一个循环,但没有成功。我什至试过 while(isalpha(str_input)){................} 它没有用
-
提示:使用 strspn() 查找仅包含属于某个集合的字符的初始子字符串的长度。