scanf()的基本问题

时间:2013-11-26 18:49:27

标签: c scanf

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

我在使用scanf时有点麻烦...

这是代码:

#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);

}

我遇到问题:scanf("%s", yn)

4 个答案:

答案 0 :(得分:2)

执行以下操作:

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

新的scanf所做的是“期待一个字符”并将其放在yn

的地址中

答案 1 :(得分:2)

阅读char使用

scanf("%c",&yn);

答案 2 :(得分:1)

scanf()只能将指针作为参数。 name是一个数组,因此根据定义它是一个指针,但yn不是。您必须将其转换为&yn指向yn 的指针,以便scanf()读取它。

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

话虽如此,请改用scanf("%c", &yn);

答案 3 :(得分:0)

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

#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);

}