Scanf无法在C中运行

时间:2015-12-02 17:43:41

标签: c character scanf

我想弄清楚为什么第二个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: 

它来自编译器。

2 个答案:

答案 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