[英]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.