我想弄清楚为什么第二个scanf对我不起作用。这是代码:
#include <stdio.h>
int main() {
char n;int p;
printf("Enter the number: ");
scanf("%d",&p);
if(p==1) {
printf("Enter a character: ");
scanf("%c",&n);
}
}
在此计划中,第二个scanf("%c",&n)
无效。我究竟做错了什么?上述程序的输出是:
Enter a number: 1
Enter a charter:
它来自编译器。
答案 0 :(得分:1)
这是因为之前的class Program
{
private static void Swap(ref char a, ref char b)
{
if (a == b) return;
a ^= b;
b ^= a;
a ^= b;
}
public static void GetPer(char[] list)
{
int x = list.Length - 1;
GetPer(list, 0, x);
}
private static void GetPer(char[] list, int k, int m)
{
if (k == m)
{
Console.Write(list);
}
else
for (int i = k; i <= m; i++)
{
Swap(ref list[k], ref list[i]);
GetPer(list, k + 1, m);
Swap(ref list[k], ref list[i]);
}
}
static void Main()
{
string str = "sagiv";
char[] arr = str.ToCharArray();
GetPer(arr);
}
}
在输入缓冲区中留下了换行符。告诉scanf忽略所有空格的简单修复:
scanf()
格式字符串中的任何空格指令(空格,scanf(" %c",&n); //Note the space before %c
等)都告诉scanf忽略输入中的任意数量的空格。
来自scanf()
手册:
\n
答案 1 :(得分:1)
之前的 A sequence of white-space characters (space, tab, newline,
etc.; see isspace(3)). This directive matches any amount of
white space, including none, in the input.
会留下一个尾随的换行符scanf()
。吃它
\n