Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
printf()中的scanf()如何工作? #包括 int main(){ int n; printf(“%d\n”,scanf(“%d”,&n)); 返回0; }_C_Printf_Scanf - Fatal编程技术网

printf()中的scanf()如何工作? #包括 int main(){ int n; printf(“%d\n”,scanf(“%d”,&n)); 返回0; }

printf()中的scanf()如何工作? #包括 int main(){ int n; printf(“%d\n”,scanf(“%d”,&n)); 返回0; },c,printf,scanf,C,Printf,Scanf,我想知道为什么这个程序的输出总是“1”?! 这里到底发生了什么?scanf()的文档说明返回值是: 成功分配的接收参数数(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在分配第一个接收参数之前发生输入失败,则可能为EOF。 您想要的代码是: #include<stdio.h> int main(){ int n; printf("%d\n",scanf("%d",&n)); return 0; } #包括 in

我想知道为什么这个程序的输出总是“1”?! 这里到底发生了什么?

scanf()的文档说明返回值是:

成功分配的接收参数数(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在分配第一个接收参数之前发生输入失败,则可能为EOF。

您想要的代码是:

#include<stdio.h>
int main(){

        int n;
        printf("%d\n",scanf("%d",&n));
        return 0;
}
#包括
int main(){
int n;
scanf(“%d”和“&n”);
printf(“%d\n”,scanf(“%d”,&n));
返回0;
}

在您的程序中,
scanf
成功地将某个值带入n时返回1,这就是为什么您总是从
printf(“%d\n”,scanf(“%d”,&n))中得到1的原因。
您应该像下面这样修改代码

#include<stdio.h>
int main(){

    int n;
    scanf("%d",&n);
    printf("%d\n",scanf("%d",&n));
    return 0;
}
#包括
int main(){
int n;
scanf(“%d”和“&n”);
printf(“%d\n”,n);
返回0;
}

返回值

这些函数返回成功匹配和分配的输入项的数量,该数量可以少于提供的数量,如果早期匹配失败,甚至可以为零

在您的程序中,它只匹配1个输入,因此如果您输入的合法值可以匹配
%d
,则函数
scanf
将返回1,否则它将返回0


在您的情况下,您可能总是满足此要求,因此它总是返回1。

该程序与

#include<stdio.h>
int main(){

        int n;
        scanf("%d",&n);
        printf("%d\n",n);
        return 0;
}
int n;
scanf("%d", &n);
printf("%d\n", n);

在Windows上,您可能可以键入control-Z(可能后跟返回键)来生成文件结束条件。在这些情况下,
scanf
应该返回,并且您的程序应该打印-1。

我怀疑您想使用

myprog < /dev/null
但你写的东西相当于

#include<stdio.h>
int main(){

        int n;
        scanf("%d",&n);
        printf("%d\n",n);
        return 0;
}
int n;
scanf("%d", &n);
printf("%d\n", n);

scanf
返回成功转换的次数。 尝试将您的
scanf
更改为如下所示。。。。 输入两个有效整数后,您将注意到打印2

int n;
int num = scanf("%d", &n); // num is the number of successful reads.
printf("%d\n", num);

@jishnu,这是个好问题,您得到的输出也是正确的,因为您只从标准输入(
stdin
)中读取了一个值

scanf()
读取标准输入提供的值,并返回从标准输入(键盘)成功读取的值数

在C语言中,
printf()
返回成功写入输出的字符数,
scanf()
返回成功读取的项目数。访问并阅读更多关于它的信息

请看以下两个代码示例

请在上联机尝试以下代码。 //叮当3.8.0


scanf
返回成功转换和分配的次数。在您的情况下,您只扫描一个参数,因此
scanf
将在成功时返回
1
,在匹配失败时返回
0
(其中第一个非空白输入字符不是十进制数字),或者在文件或错误结束时返回
EOF

调用
printf
时,将对其每个参数求值,并将结果传递给函数。在这种情况下,评估涉及调用
scanf
函数。然后,
scanf
返回的值被传递到
printf

这基本上和写作一样

//clang 3.8.0

#include<stdio.h>
int main(){

    int n;
    printf("%d\n",scanf("%d",&n));   //1
    return 0;
}
有关咯咯笑的信息,请参见当您输入
abc
或键入CtrlD(或Windows上的CtrlZ)时会发生什么

请注意,
printf
还返回一个值(写入流的字节数),因此您可以编写类似于


  • 开玩笑。不要那样做。

    如果您将此代码用作示例, 它显示:警告:函数“printf”的隐式声明[-Wimplicit函数声明]

    printf( "num bytes printed = %d\n", printf( "num items read = %d\n", scanf( "%d", &n ) ) );
    
    返回值:-1

    诸如printf和scanf之类的函数的输出可以用作另一个函数的参数。

    scanf()
    是一个整数返回型函数。它返回其中转换字符的总数。对于ex,如果一项声明写为:

    int main()
    {
    char b[40]; 
    printf(" %d", scanf("%s", b));
    getchar();
    } 
    
    然后该程序的输出将为
    3
    。 这是因为
    scanf()。
    所以在你的代码中,
    scanf()
    返回
    1
    printf()
    ,因此程序的输出是
    1
    。 这是因为如果在
    printf()
    中使用多条语句,则执行顺序从右向左开始。
    因此,在
    C
    编程中,首先执行
    scanf()
    ,然后执行
    printf()
    scanf()
    从键盘
    stdin()
    获取输入,并返回成功读取的输入数 和
    printf()
    返回写入显示监视器的
    stdout()的字符数。


    在您的程序中,
    scanf()
    只读取一个返回的输入,并由
    printf()
    打印。因此,无论输入是什么,输出总是1,因为它只读取一个输入

    下面来看看这个C程序:

    int c;
    c=scanf("%d %d %d");
    printf("%d",c);
    
    #包括
    int main(){
    int n,n2;
    printf(“%d\n”,scanf(“%d%d”,&n,&n2));
    返回0;
    }
    
    它使用
    scanf()
    stdin()
    中获取输入或读取两个整数,因此输出将始终为2


    **注意:如果输入不是整数,则输出为0,因为它只读取整数。

    scanf
    从函数返回一个值:转换的项数,如手册页所示。手册页应该是您使用任何功能的第一站。您没有在手册页上阅读任何内容
    int main()
    {
    char b[40]; 
    printf(" %d", scanf("%s", b));
    getchar();
    } 
    
    int c;
    c=scanf("%d %d %d");
    printf("%d",c);
    
    #include<stdio.h>
    int main(){
    
            int n, n2;
            printf("%d\n",scanf("%d %d",&n,&n2));
            return 0;
    }