int sales[ 1 ];
do
{
scanf_s( "%d", sales, 1 );
printf( "\n%d\n", sales[ 0 ] );
printf( "\nyou got weekly income of $ %d\n\n", commision( sales[ 0 ] ) );
} while ( sales[0] >-1 );
我想问一下,为什么每次我用空格输入int(例如123 456),输出都是sales [0] = 123然后突然自动将456分配给sales [0], 你能解释一下为什么吗?
答案 0 :(得分:1)
您的代码所做的是它从标准输入中读取带符号的数字。 (%d
读取直到空格,但忽略空格本身。)然后将该数字(第一个数字为123
)写入索引sales
的{{1}}数组中。然后,您将0
函数的返回值写入标准输出。
然后突然自动将456分配给sales [0]
如果你的意思是,在程序执行结束时commision(...)
包含sales[0]
而不是456
,这是因为我上面描述的整个过程只要你的{{ {1}}循环运行。如果销售[0]大于123
,do while
在第一个程序之后为-1
,它将再次运行并从标准输入中读取sales[0]
并且将其写入123
数组。
456
从sales
读取输入的更多示例:
scanf_s("%d", int_pointer, 1)
将在stdin
42 43ab 44
,scanf_s
和42
的3个43
中读取。44
将在42 a
和scanf_s
两个42
中读取。0
将在4 42 a a43 44
scanf_s
,42
,0
和0
中读取。答案 1 :(得分:1)
因为scanf很挑剔,而且它想要输入一个数字。对它来说,空白表示所需输入格式的结束。
123 [whitespace] - > 123被分配,事情发生,再次循环。
456 [空白] - > 456被分配,事情发生,再次循环。
答案 2 :(得分:0)
int commission(int i) {
return 42*i;
}
int main(int argc, const char * argv[]) {
int sales[ 1 ];
do
{
scanf_s( "%d", sales, 1 );
printf( "\n%d\n", sales[ 0 ] );
printf( "\nyou got weekly income of $ %d\n\n", commission( sales[ 0 ] ) );
sales[0] = -1; // Won't jump to the next value
} while ( sales[0] >-1 ); // But then what's the point of the loop?
return 0;
}