【问题标题】:Basic troubles with scanf() [duplicate]scanf() 的基本问题 [重复]
【发布时间】:2013-11-26 18:49:27
【问题描述】:

我过去学过几门语言,我认为学习 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)

【问题讨论】:

  • 考虑char yn[2]; scanf("%1s", yn);。学习者最大的障碍是没有意识到'\n' 通常直到下一个scanf() 才会被消耗。建议查看fgets()/sscanf() 获取用户 IO。

标签: c scanf


【解决方案1】:

执行以下操作:

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

新的scanf所做的就是说“期望一个字符”并将其放在yn的地址中

【讨论】:

    【解决方案2】:

    要读入一个字符使用

    scanf("%c",&yn);
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        或自己准备并做一个简单的 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);
        
        }
        

        【讨论】:

          猜你喜欢
          • 2011-05-20
          • 2013-02-27
          • 1970-01-01
          • 2012-03-19
          • 1970-01-01
          • 2019-03-11
          • 2013-12-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多