输出突然与空间分开int

时间:2016-04-17 04:02:57

标签: c arrays output

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], 你能解释一下为什么吗?

3 个答案:

答案 0 :(得分:1)

您的代码所做的是它从标准输入中读取带符号的数字。 (%d读取直到空格,但忽略空格本身。)然后将该数字(第一个数字为123)写入索引sales的{​​{1}}数组中。然后,您将0函数的返回值写入标准输出。

  

然后突然自动将456分配给sales [0]

如果你的意思是,在程序执行结束时commision(...)包含sales[0]而不是456,这是因为我上面描述的整个过程只要你的{{ {1}}循环运行。如果销售[0]大于123do while在第一个程序之后为-1,它将再次运行并从标准输入中读取sales[0]并且将其写入123数组。

456sales读取输入的更多示例:

  • 输入scanf_s("%d", int_pointer, 1)将在stdin 42 43ab 44scanf_s42的3个43中读取。
  • 输入44将在42 ascanf_s两个42中读取。
  • 输入0将在4 42 a a43 44 scanf_s4200中读取。

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