【问题标题】:Only first letter in scanf is being printed out仅打印出 scanf 中的第一个字母
【发布时间】:2015-08-15 17:40:49
【问题描述】:
#include "stdafx.h"


int main() {
    char name;
    printf("What is your name:"); // I enter my name..
    scanf_s("%c", &name); // Should grab my name in this case (Brian)
    printf("Hello, %c\n", name); //Should print "Hello, Brian."

    return 0;
}

怎么了?为什么它不存储全名而只存储第一个字母?

【问题讨论】:

  • 我相信你想要 %s。 %c 是单个字符
  • 在使用单个字符输出格式时,您实际上还期望什么,例如 printf("Hello, %c\n", name);??

标签: c visual-studio


【解决方案1】:

因为name 只是一个char,而您在scanf(和printf())中使用了%c

看起来你想要的是:

char name[32]; /* assumes the name is 31 chars or less */
printf("What is your name:"); // I enter my name..
scanf_s("%s", &name); // Should grab my name in this case (Brian)
printf("Hello, %s\n", name); //Should print "Hello, Brian."

但既然您已将问题标记为 C++,那么还有比这更好的方法!

【讨论】:

  • 所以我进行了更改,不知道这是 Visual Studio 还是什么,但每当控制台出现并要求我输入我的名字时,我都会这样做并按 Enter,然后 Visual Studio 崩溃。 .(仅在将 %c 更改为 %s 之后)
  • @thatoneaveeno ,使用scanf_s("%s", name, sizeof(name));,它会起作用。
【解决方案2】:

缺少参数:

fscanf_s 函数等效于 fscanf,除了 cs[ 转换说明符适用于一对参数...该参数在参数列表中紧跟第二个参数,其类型为rsize_t,并给出数组中由该对的第一个参数指向的元素的数量。 C11 §K.3.5.3.2 4

// scanf_s("%c", &name);
scanf_s("%c", &name, (rsize_t) 1);

这修复了代码的未定义行为,但仍将仅保存/打印 1 个char 输入。

代码应该读入多个char 作为字符串。

 #define NAME_SIZE 100
 char name[NAME_SIZE];
 scanf_s("%s", &name, (rsize_t) NAME_SIZE);
 printf("Hello, %s\n", name);

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2022-08-23
    • 1970-01-01
    • 2013-02-08
    • 2021-11-01
    • 2012-03-15
    相关资源
    最近更新 更多