scanf()跳过变量

时间:2011-09-30 07:58:53

标签: c scanf

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

  

请解释一下!

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

4 个答案:

答案 0 :(得分:22)

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

来自man scanf的报价:

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

答案 1 :(得分:13)

Asterisk(*)表示将读取format的值,但不会写入变量。 scanf不希望在其参数列表中为该值指定变量指针。你应该写:

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

答案 2 :(得分:2)

http://en.wikipedia.org/wiki/Scanf#Format_string_specifications

百分比符号后面的可选星号(*)表示此格式说明符读取的数据不存储在变量中。

答案 3 :(得分:-1)

这里的关键是清除缓冲区,所以scanf不会认为它已经有一些输入,所以它不会被跳过!

#include <stdio.h>
#include<stdlib.h>

void main() {
    char operator;
    double n1, n2;

    printf("Enter two operands: ");
    scanf("%lf %lf",&n1, &n2);
    
   fflush(stdin);   //do this between two scanf
    
    printf("Enter an operator (+, -, *, /): ");
    scanf("%c", &operator);

}
<块引用>

fflush(stdin); //这会清除新输入的scanf,因此它不会忽略任何输入行,因为它有 一些字符已经存储在它的内存中