scanf()的基本问题

scanf()的基本问题,c,scanf,C,Scanf,我过去学过几门语言,我认为学习C是个好主意 我在扫描方面有点麻烦 代码如下: #include <stdio.h> #include <string.h> int main(){ char name[20]; char yn; printf("Welcome to Benjamin's first C programme! \n\n"); printf("What is your name? \t"); scanf("%s", n

我过去学过几门语言,我认为学习C是个好主意

我在扫描方面有点麻烦

代码如下:

#include <stdio.h>
#include <string.h>


int main(){

    char name[20];
    char yn;

    printf("Welcome to Benjamin's first C programme! \n\n");

    printf("What is your name? \t"); scanf("%s", name); printf("\n");
    printf("Is your name %s? [y/n]", name); scanf("%s", yn);

}
#包括
#包括
int main(){
字符名[20];
查尔恩;
printf(“欢迎参加Benjamin的第一个C课程!\n\n”);
printf(“你叫什么名字?\t”);scanf(“%s”,name);printf(“\n”);
printf(“您的名字是%s吗?[y/n]”,name);scanf(“%s”,yn);
}
我遇到问题:
scanf(“%s”,yn)
请执行以下操作:

printf("Is your name %s? [y/n]", name); scanf("%c", &yn);

新的scanf所做的是说“期望一个字符”,并把它放在yn的地址中,以便读入字符使用

scanf("%c",&yn);

或者准备好做一个简单的malloc(但这不是更好的选择)

#包括
#包括
#包括
int main(){
字符名[20];
char*yn;
yn=(char*)malloc(sizeof(char)*2);
printf(“欢迎参加Benjamin的第一个C课程!\n\n”);
printf(“你叫什么名字?\t”);scanf(“%s”,name);printf(“\n”);
printf(“您的名字是%s吗?[y/n]”,name);scanf(“%s”,yn);
}
scanf()
只能将指针作为参数
name
是一个数组,因此定义为指针,但
yn
不是。您必须将其转换为
&yn
,一个指向
yn
的指针,才能使
scanf()
读取它

另外,
yn
只能保存一个
char
,而不能像
name
中那样保存一个char数组,因此您必须告诉
scanf()
您要为单个char读取
%c
,而不是为以null结尾的字符串读取
%s
,因为如果这样做,您很可能会覆盖堆栈并遇到麻烦


也就是说,使用scanf(“%c”和&yn)取而代之。

考虑
char-yn[2];扫描频率(“%1s”,yn)。学习者遇到的最大障碍是没有意识到“\n”通常在下一次
scanf()
之前不会被使用。建议查看用户IO的
fgets()/sscanf()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(){

    char name[20];
    char *yn;
    yn = (char*) malloc(sizeof(char)*2);
    printf("Welcome to Benjamin's first C programme! \n\n");

    printf("What is your name? \t"); scanf("%s", name); printf("\n");

    printf("Is your name %s? [y/n]", name); scanf("%s", yn);

}