只打印出scanf中的第一个字母

时间:2015-06-02 04:39:28

标签: c visual-studio

span

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

2 个答案:

答案 0 :(得分:0)

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

看起来你想要的是:

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 ++,那么有更好的方法可以做到这一点!

答案 1 :(得分:0)

缺少参数:

  

fscanf_s函数等同于fscanf,但cs[转换说明符适用于一对参数...该参数紧接在参数列表中由第二个参数跟随,该参数具有类型rsize_t并且给出该对的第一个参数指向的数组中的元素数。 C11§K.3.5.3.24

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