繁体   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