簡體   English   中英

輸出突然與空間分開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 );

我想問一下,為什么每次我輸入帶空格的int(例如123 456)時,輸出都是sales [0] = 123,然后突然將456自動分配給sales [0],你們可以解釋為什么嗎?

您的代碼所做的是從標准輸入中讀取帶符號的數字。 %d會一直讀到空格,但會忽略空格本身。)然后,它將那個數字(第一個數字是123 )寫到索引為0 sales數組中。 然后,您將commision(...)函數的返回值寫入標准輸出。

然后突然將456自動分配給銷售[0]

如果這樣意味着您在程序執行的結尾處sales[0]包含456而不是123那是因為只要您運行do while循環,上述我完成的整個過程就完成了。 如果sales [0]大於-1 (在第一個過程之后sales[0]123的情況),它將再次運行並從標准輸入讀取456並將其寫入sales數組。

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

  • 輸入42 43ab 44將在3個不同的讀取scanf_s424344
  • 輸入42 a將在2個不同的scanf_s讀取為420
  • 輸入42 a a43 44將在4個不同的被讀取scanf_s420044

因為scanf挑剔,並且希望輸入一個數字的確切值。 空格標志着所需輸入格式的結尾。

123 [whitespace]-> 123被分配,發生東西,再次循環。

456 [whitespace]-> 456被分配,發生東西,再次循環。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM