这是一个简单的代码。我正在进行输入,打印,再次打印并再次打印。
第二次它不允许我提供输入。
有人可以解释原因吗?
#include "stdio.h"
int main()
{
char buff[50];
printf("Enter a String\n");
scanf("%[^\n]s",buff);
puts(buff);
printf("Enter another String\n");
scanf("%[^\n]s",buff);
puts(buff);
return 0;
}
输出:
Enter a String
Hello // This I have entered
Hello // This is the output
Enter another String
Hello // This I haven't entered, It automatically takes this.
答案 0 :(得分:3)
在第二个scanf()中,在输入说明符的开头放置一个空格:
scanf(" %[^\n]s",buff);
^^^
这将吃当前第二次满足scanf的字符,并允许您输入第二个字符串。
答案 1 :(得分:3)
使用其他格式有帮助
// scanf("%[^\n]s",buff);
scanf(" %49[^\n]",buff);
// ^ no s
// ^ width limit
// ^ consume previous line's leftover \n (and all white-space)
请注意,当用户仅输入scanf(" %[^\n]",buff);
时,buff
不会更改" \n"
。
但最好使用fgets()
fgets(buff, sizeof buff, stdin);
buf[strcspn(buffer, "\n")] = 0; // to remove \n