任何人都可以解释以下程序的扫描值的输出..?

时间:2015-07-01 07:19:22

标签: c printf output scanf

<span class="k-widget k-combobox k-header">
<span tabindex="-1" unselectable="on" class="k-dropdown-wrap k-state-default k-state-hover">
    <input name="BankId_input" class="k-input valid" type="text" autocomplete="off" maxlength="524288" role="combobox" aria-expanded="false" tabindex="0" aria-disabled="false" aria-readonly="false" aria-autocomplete="both" aria-owns="      BankId_listbox" aria-busy="false" aria-activedescendant="BankId_option_selected" aria-invalid="false" style="width: 100%;">
    <span tabindex="-1" unselectable="on" class="k-select">
        <span unselectable="on" class="k-icon k-i-arrow-s" role="button" tabindex="-1" aria-controls="BankId_listbox">select</span>
    </span>
</span>
<input data-val="true" data-val-number="The field Bank Combo must be a number." id="BankId" name="BankId" no-custom-input="true" data-bind="enable : IsCityReadOnly" type="text" data-role="combobox" aria-disabled="false" aria-readonly="false" style="display: none;" aria-invalid="false" aria-describedby="BankId-error" class="valid">

如果向#include<stdio.h> int main() { int i; printf("%d\n", scanf("%d", &i) ); return 0; } 提供了某个值,则程序的输出仍为1.为什么?

3 个答案:

答案 0 :(得分:2)

  

如果提供了一些值scanf,但程序的输出仍为1.为什么?

因为scanfint作为per the documentation返回。 scanf将返回已成功扫描和分配的项目总数。

在您的情况下,scanf如果成功扫描int中的stdin,则会返回1,否则它将返回0.它还将返回-1在遇到EOF时。然后,此值由您拥有的printf打印。

如果您要打印i的值,请分隔scanfprintf,即使用

int i;
scanf("%d", &i)
printf("%d\n", i);

而不是

int i;
printf("%d\n" , scanf("%d", &i) );

答案 1 :(得分:2)

在下面的陈述中,

printf("%d\n" , scanf("%d", &i) );

打印{em>扫描并存储的值scanf(),您正在打印返回值 of scanf()

scanf()扫描的值将存储在提供的参数中,此处为变量i

请记住,scanf() does not return the scanned value, it returns the number of items it successfully matched and assigned

如果要打印扫描值,则必须使用存储值的相同变量,即i

  printf("The scanned value is %d\n", i);

即说明,main()的推荐签名是int main(void)

答案 2 :(得分:1)

someobj1的返回类型是成功填充的参数列表的项目数。在您的情况下,正在读取一个项目,如果成功scanf()将由1返回。以下内容将返回scanf(),因为有两个项目正在阅读。

2