输出突然用 space 分隔 int

output suddenly separate int with space

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 );

我想问一下,为什么我每次用space输入int(比如123 456),输出的是sales[0]=123 然后突然自动赋值456给sales[0], 你们能解释一下为什么吗?

您的代码所做的是从标准输入中读取一个带符号的数字。 (%d 会一直读到空格,但会忽略空格本身。)然后它将那个数字(第一个数字是 123)写入索引 0 处的 sales 数组.然后,您将 commision(...) 函数的 return 值写入标准输出。

then suddenly it automatically assign 456 to sales[0]

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

scanf_s("%d", int_pointer, 1)stdin 读取输入的更多示例:

  • 输入 42 43ab 44 将在 3 种不同的 scanf_s 中读取为 424344
  • 输入 42 a 将在 2 个不同的 scanf_s 中读取为 420.
  • 输入 42 a a43 44 将以 4 个不同的 scanf_s 读取为 420044
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;
}

因为 scanf 很挑剔,它想要一个数字的准确输入。对它来说,空格表示所需输入格式的结束。

123[whitespace] -> 123 已分配,事情发生,再次循环。

456[whitespace] -> 456 已分配,事情发生,再次循环。