C 为什么可以';我不能键入带空格的字符串吗?

C 为什么可以';我不能键入带空格的字符串吗?,c,struct,C,Struct,我目前正在练习struct,下面是我的简单代码。我现在有个问题,我找不到答案。 我的代码要求我键入歌曲的名称、艺术家和歌曲的持续时间。我输入了“我的闪电速度”,但只有“我的”这个词填满了歌曲的名字。“闪电”这个词充满了艺术家,而速度则充满了持续时间。为什么?我怎样才能修好它 #define _CRT_SECURE_NO_WARNINGS #include <string.h> #include <stdio.h> #define SIZE 20 typedef stru

我目前正在练习struct,下面是我的简单代码。我现在有个问题,我找不到答案。 我的代码要求我键入歌曲的名称、艺术家和歌曲的持续时间。我输入了“我的闪电速度”,但只有“我的”这个词填满了歌曲的名字。“闪电”这个词充满了艺术家,而速度则充满了持续时间。为什么?我怎样才能修好它

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#define SIZE 20

typedef struct {
    char name[SIZE];
    char artist[SIZE];
    int duration;
} songname;

songname FillSong();

int main()
{
    songname songNumb1, songNumb2, songNumb3;

    songNumb1 = FillSong();
    songNumb2 = FillSong();

    return 0;
}

songname FillSong()
{
    songname tempC;

    printf("\n");
    printf("Enter the name of this song: ");
    scanf(" %s", tempC.name);
    printf("name: %s\n", tempC.name);

    printf("Who is the artist? ");
    scanf(" %s", tempC.artist);
    printf("artist: %s\n", tempC.artist);

    printf("What is the duration(seconds)? ");
    scanf("%d", &tempC.duration);
    printf("duration: %d\n", tempC.duration);

    return tempC;
}
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
#定义尺寸20
类型定义结构{
字符名称[大小];
字符艺术家[大小];
int持续时间;
}歌名;
歌曲名FillSong();
int main()
{
歌曲名称SongNumber1、SongNumber2、SongNumber3;
songNumb1=FillSong();
songNumb2=FillSong();
返回0;
}
歌曲名FillSong()
{
歌曲名tempC;
printf(“\n”);
printf(“输入这首歌的名字:”);
scanf(“%s”,临时名称);
printf(“名称:%s\n”,临时名称);
printf(“谁是艺术家?”);
scanf(“%s”,临时艺术家);
printf(“艺术家:%s\n”,临时艺术家);
printf(“持续时间(秒)?”;
scanf(“%d”、&tempC.duration);
printf(“持续时间:%d\n”,临时持续时间);
返回tempC;
}

默认情况下,scanf将读取第一组非空白字符。 考虑读一整行的歌曲名称或任何可能在名称中有空格的事物。


在某些情况下,您可能希望使用逗号或分号分隔的字段,中给出的表达式将有助于此类情况的处理默认情况下,scanf将读取非空白字符的第一个集合。 考虑读一整行的歌曲名称或任何可能在名称中有空格的事物。

在某些情况下,可能需要逗号或分号分隔的字段,中给出的表达式将有助于此类情况

如果要输入带空格的字符串,则检测到新行或空格时,scanf()函数将停止读取尝试使用get()函数

语法:gets(变量名)

gets函数仅在输入新行时停止获取输入。

如果要输入带空格的字符串,请尝试使用gets()函数,当检测到新行或空白时,scanf()函数停止读取

语法:gets(变量名)


gets函数仅在输入新行时停止获取输入。

scanf在读取输入时跳过空白(空格、制表符、换行符等)。要读取格式不固定的输入,最好一次读取一行


请阅读Brian W.Kernighan和Dennis M.Ritchie的《C编程语言》,了解更多信息。

scanf在阅读输入时跳过空白(空格、制表符、换行符等)。要读取格式不固定的输入,最好一次读取一行


请阅读Brian W.Kernighan和Dennis M.Ritchie的“C编程语言”以了解更多信息。

您是否已经阅读了
scanf
的手册页?嗯,我可以问一下手册页是什么吗?您可以在谷歌中键入“手册页scanf”。谷歌搜索“site:msdn.microsoft.com scanf”可以找到最新的(以及旧版本的)Microsoft C运行时的
scanf()
文档。对于需要了解Microsoft规范的任何其他C函数,请清洗并重复此操作。到目前为止,这两个答案都不能阻止大于
大小的字符串输入。您是否已阅读
scanf
的手册页?嗯,我可以问一下手册页是什么吗?您键入“手册页scanf”进入谷歌。谷歌搜索的网站:msdn.microsoft.com scanf可以找到microsoft C运行时的
scanf()
的最新(以及旧版本)文档。对于您需要了解Microsoft规范的任何其他C函数,请清洗并重复此操作。到目前为止,这两个答案都不能阻止字符串输入大于
大小
。切勿建议将
get()
作为任何问题的解决方案。阅读。不要建议将
get()
作为任何问题的解决方案。阅读