scanf()的基本问题
我过去学过几门语言,我认为学习C是个好主意 我在扫描方面有点麻烦 代码如下: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
#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);
}