c/c++语言开发共享以下给出的代码是错误的吗?

#include  int main() { int a; printf(scanf("%d",&a)); return 0; } 

我收到此消息“Segmentation fault(core dumped)”

    printf()函数的格式为: –

     printf(const char *format, ...) 

    您必须提供一个字符串格式说明符的格式字符串 )作为函数printf()参数。

    你可以试试: –

     printf("%d",scanf("%d",&a)); // with format string 

    如果扫描成功,将打印1 。 这里%dinteger参数的格式字符串

    要读取和打印变量a ,请尝试: –

      scanf("%d",&a); // reading printf("%d",a); // printing 

    阅读编译器警告。

     prog.c:8:12: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [-Wint-conversion] printf(scanf("%d",&a)); ^~~~~ 

    printf想要一个字符串作为第一个参数。 你给它一个整数。

    你想打印’a’,所以你应该这样做

     scanf("%d",&a); printf("%d", a); 

    scanf()返回写入链接的字符总数

    scanf查看你的格式字符串,看到%d并将它与你提供的&a地址匹配。 如果在尝试读取值时出现错误, scanf将返回EOF ,否则它将返回成功匹配为int的项目数。 例如,如果键入123 ,则scanf("%d", &a) == 1为true,但如果键入q123 ,则scanf("%d", &a) == 0为true。

    printf需要一个格式字符串,就像scanf一样,它使用该格式来打印参数的值。 它无法知道scanf使用的格式是否也是您想要用于打印的格式,并且您没有提供字符串,这是一种指针,包含打印参数的格式。 这是您的代码的问题。

    整数(例如scanf返回的int值)可以转换为指针,而无需告诉编译器执行转换。 因此,编译器可能会抱怨您正在做一些可能存在问题的事情( 警告:传递’printf’的参数1使得指针来自整数而不进行强制转换 ),但该代码将被允许编译和执行。

    当您看到类似的警告时,请查看该参数所需的函数类型以及您用作该参数的值的类型。 很可能编译器试图帮助你避免像printf(scanf("%d", &a));这样的错误printf(scanf("%d", &a));

      以上就是c/c++开发分享以下给出的代码是错误的吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519128.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐