[英]C string(char array): ignores next scanf because of spaces
说这样的话:
#include <stdio.h>
void main() {
char fname[30];
char lname[30];
printf("Type first name:\n");
scanf("%s", fname);
printf("Type last name:\n");
scanf("%s", lname);
printf("Your name is: %s %s\n", fname, lname);
}
如果我为fname
键入"asdas asdasdasd"
,它将不会要求我输入lname
。 我只是想问一下如何解决这个问题,谢谢。
将%s
放在格式列表中会使scanf()
读取字符,直到找到空格 。 您的输入字符串包含空格,因此第一个scanf()
仅读取asdas
。 scanf()
被认为是危险的(想想如果输入超过30个字符会发生什么),这就是为什么如其他人所指出你应该使用fgets()
。
您可以这样做:
#include <stdio.h>
#include <string.h>
int main()
{
char fname[30];
char lname[30];
printf("Type first name:\n");
fgets(fname, 30, stdin);
/* we should trim newline if there is one */
if (fname[strlen(fname) - 1] == '\n') {
fname[strlen(fname) - 1] = '\0';
}
printf("Type last name:\n");
fgets(lname, 20, stdin);
/* again: we should trim newline if there is one */
if (lname[strlen(lname) - 1] == '\n') {
lname[strlen(lname) - 1] = '\0';
}
printf("Your name is: %s %s\n", fname, lname);
return 0;
}
更改
scanf("%s", fname);
至
scanf("%[^\n]%*c", fname);
[^ \\ n]接受'\\ n'以外的接受
%* c忽略一个字符('\\ n')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.