2011-09-30 87 views
9

在C中,使用带参数的scanf()scanf("%d %*d", &a, &b)的行为有所不同。它只为一个变量输入值而不是两个!scanf()跳过变量

请解释一下!

scanf("%d %*d", &a, &b); 

回答

15

*基本上意味着说明符被忽略(整数被读取,但是未分配)。

man scanf报价:

*  Suppresses assignment. The conversion that follows occurs as 
      usual, but no pointer is used; the result of the conversion is 
      simply discarded. 
+0

但是,如果我放弃一个实际上不存在于文件上的整数,看起来fscanf不会失败。 – Bionix1441

10

星号(*)表示将读取格式的值,但不会写入变量。 scanf不希望此值的参数列表中包含变量指针。你应该写:

scanf("%d %*d",&a); 
+0

有没有办法在我们想用'fscanf'读取的字符之后忽略所有字符?即直到行结束时忽略所有事情?我一直在寻找那个相当长的一段时间。 – Bionix1441

+0

@ Bionix1441'scanf'只读取'stdin'(和'fscanf'文件中的字符)以满足格式字符串的需要。如果您的变量中出现不正确的值,则表示您遇到与该格式匹配的错误。检查返回值。如果它没有帮助,我想你需要用例子发布一个适当的问题。 –