在C中,scanf()
使用参数,scanf("%d %*d", &a, &b)
的行为不同。只为一个变量而不是两个变量输入值!
请解释一下!
scanf("%d %*d", &a, &b);
答案 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,因此它不会忽略任何输入行,因为它有 一些字符已经存储在它的内存中