[英]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_s
為42
, 43
和44
。 42 a
將在2個不同的scanf_s
讀取為42
和0
。 42 a a43 44
將在4個不同的被讀取scanf_s
為42
, 0
, 0
和44
。 因為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.