代码之家  ›  专栏  ›  技术社区  ›  Abdulvakaf K

为什么要在给定C代码的格式说明符之前提供单个空格?

  •  -3
  • Abdulvakaf K  · 技术社区  · 7 年前

    在这个程序1中,我没有得到预期的输出。

    // PROGRAM 1
    #include <stdio.h>
    
    int main () {
      char str1, str2;
    
      printf("Enter char1: \n");
      scanf("%c", str1);
    
      printf("Enter char2: \n");
      scanf("%c", str2);
    
      printf("Entered char1: %c\n", str1);
      printf("Entered char2:%c\n", str2);
    
      return(0);
    }
    

    在这个程序中,我得到了预期的输出。所以请告诉我为什么不参加计划1

    //PROGRAM 2
    #include <stdio.h>
    
    int main () {
      char str1[5], str2[5];
    
      printf("Enter name: \n");
      scanf("%s", str1);
    
      printf("Enter your website name: \n");
      scanf("%s", str2);
    
      printf("Entered Name: %s\n", str1);
      printf("Entered Website:%s\n", str2);
    
      return(0);
    }
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Marievi    7 年前

    scanf 需要一个 指针 作为论点。所以你应该改变 scanf公司 在您的第一个计划中:

    scanf("%c", &str1);
    

    scanf("%c", &str2);
    

    为了通过 地址 你的变量。


    第二个程序工作的原因是 str1 str2 在本例中是数组,因此当您将其名称作为参数传递给 scanf公司 ,你实际上传递了他们的地址。这是因为数组名会衰减为指针。您也可以参考 this answer

        2
  •  1
  •   msc    7 年前

    在第一个程序中, %c 格式说明符仅打印一个字符。因此,如果只想打印一个字符,请使用 %c 格式说明符。

    此外,如果你 scan 然后使用字符类型 & . 喜欢 scanf("%c",&str2);

    %s 格式说明符打印字符串。所以,如果你想打印字符串,那么使用 %s 格式说明符。

    没有必要 & 因为字符串缓冲区已经表示为地址。