下é¢ç»™å‡ºçš„代ç æ˜¯é”™è¯¯çš„å—?

时间:2018-08-19 14:27:25

标签: c gcc

#include <stdio.h>

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

我收到此消æ¯â€œåˆ†æ®µé”™è¯¯ï¼ˆæ ¸å¿ƒå·²è½¬å‚¨ï¼‰â€

4 个答案:

答案 0 :(得分:5)

printf()函数的格å¼ä¸ºï¼š-

printf(const char *format, ...)

您必须æ供字符串(带有格å¼è¯´æ˜Žç¬¦çš„æ ¼å¼å­—符串)作为函数printf()çš„å‚数。

您å¯ä»¥å°è¯•ï¼š-

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

如果扫ææˆåŠŸï¼Œå°†æ‰“å° 1 。这里的%d以格å¼å­—符串用于integerå‚数。

è¦è¯»å–和打å°å˜é‡a,请å°è¯•ï¼š-

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

答案 1 :(得分:2)

阅读您的编译器警告。

{
  "categories": {
    "categories": [
      {
        "code": "code",
        "name": "name"
      }
    ]
  }
}

prog.c:8:12: warning: passing argument 1 of ‘printf’ makes pointer from integer without a cast [-Wint-conversion] printf(scanf("%d",&a)); ^~~~~ 希望将字符串作为第一个å‚数。您è¦ç»™å®ƒä¸€ä¸ªæ•´æ•°ã€‚

答案 2 :(得分:1)

您è¦æ‰“å°'a',因此您应该这样åš

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

scanf()返回写入his answer的字符总数

答案 3 :(得分:1)

scanf查看您的格å¼å­—符串,看到%d并将其与int一起æ供的&a 的地å€ã€‚如果å°è¯•è¯»å–值时å‘生错误,scanf将返回EOF,å¦åˆ™å°†ä»¥intçš„å½¢å¼æˆåŠŸåŒ¹é…项的数é‡ã€‚例如,如果键入123,则scanf("%d", &a) == 1为true,但是如果键入q123,则scanf("%d", &a) == 0为true。

printf与scanf一样需è¦æ ¼å¼å­—符串,并且使用该格å¼æ¥æ‰“å°å‚数的值。它无法知é“scanf所使用的格å¼ä¹Ÿä¸Žæ‚¨è¦ç”¨äºŽæ‰“å°çš„æ ¼å¼ç›¸åŒï¼Œå¹¶ä¸”您没有æ供一个字符串,它是一ç§æŒ‡é’ˆï¼Œå…¶ä¸­åŒ…å«ç”¨äºŽæ‰“å°å‚æ•°çš„æ ¼å¼ã€‚这是您的代ç å­˜åœ¨çš„问题。

å¯ä»¥å°†æ•´æ•°ï¼ˆä¾‹å¦‚int返回的scanf值)转æ¢ä¸ºæŒ‡é’ˆï¼Œè€Œæ— éœ€å‘Šè¯‰ç¼–译器执行转æ¢ã€‚结果,编译器å¯èƒ½ä¼šæŠ±æ€¨æ‚¨æ­£åœ¨åšä¸€äº›æ½œåœ¨çš„问题(<警告>:警告:传递'printf'çš„å‚æ•°1使指针从整数转æ¢è€Œæ— éœ€å¼ºåˆ¶è½¬æ¢ï¼‰ï¼Œä½†æ˜¯è¯¥ä»£ç å°†è¢«å…许编译然åŽæ‰§è¡Œã€‚

当您看到这样的警告时,请查看该函数对该å‚æ•°è¦æ±‚的类型以åŠç”¨ä½œè¯¥å‚数的值的类型。编译器试图帮助您é¿å…出现类似printf(scanf("%d", &a));

的错误的å¯èƒ½æ€§éžå¸¸å¥½