输出突然用 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
中读取为 42
、43
和 44
。
- 输入
42 a
将在 2 个不同的 scanf_s
中读取为 42
和 0
.
- 输入
42 a a43 44
将以 4 个不同的 scanf_s
读取为 42
、0
、0
和 44
。
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 已分配,事情发生,再次循环。
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
中读取为42
、43
和44
。 - 输入
42 a
将在 2 个不同的scanf_s
中读取为42
和0
. - 输入
42 a a43 44
将以 4 个不同的scanf_s
读取为42
、0
、0
和44
。
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 已分配,事情发生,再次循环。