[英]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.