在此计划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);
}
答案 0 :(得分:3)
scanf
需要指针作为参数。因此,您应该将第一个程序中的scanf
更改为:
scanf("%c", &str1);
和
scanf("%c", &str2);
为了传递变量的地址。
第二个程序的工作原因是str1
和str2
在这种情况下是数组,因此当您将其名称作为参数传递给scanf
时,实际上是传递了它们的地址。这是因为数组名称衰减为指针。您还可以参考this answer了解详情。
答案 1 :(得分:1)
在第一个程序中,%c
格式说明符只打印一个字符。因此,如果您只想打印一个字符,请使用%c
格式说明符。
此外,如果您使用scan
字符类型,请使用&
。比如scanf("%c",&str2);
在第二个程序中,%s
格式说明符打印字符串。因此,如果要打印字符串,请使用%s
格式说明符。
%s
不需要&
,因为字符串缓冲区已经表示为地址。