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

时间:2017-11-02 06:54:43

标签: c printf scanf

在此计划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);
}

在这个程序中我得到了预期的输出。所以请告诉我为什么不为PROGRAM 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 个答案:

答案 0 :(得分:3)

scanf需要指针作为参数。因此,您应该将第一个程序中的scanf更改为:

scanf("%c", &str1);

scanf("%c", &str2);

为了传递变量的地址

第二个程序的工作原因是str1str2在这种情况下是数组,因此当您将其名称作为参数传递给scanf时,实际上是传递了它们的地址。这是因为数组名称衰减为指针。您还可以参考this answer了解详情。

答案 1 :(得分:1)

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

此外,如果您使用scan字符类型,请使用&。比如scanf("%c",&str2);

在第二个程序中,%s格式说明符打印字符串。因此,如果要打印字符串,请使用%s格式说明符。

%s不需要&,因为字符串缓冲区已经表示为地址。