为什么我不能用空格键入字符串?

时间:2016-11-12 22:50:30

标签: c struct

我目前正在练习struct,这是我的简单代码。我目前在这里遇到问题,我找不到答案。 我的代码要求我输入歌曲的名称,歌曲的艺术家和持续时间。我键入了“我的闪电速度”,但只有“我的”这个词填充了这首歌的名字。 “闪电”这个词填满了艺术家,速度填补了持续时间。为什么?我该如何解决? #define _CRT_SECURE_NO_WARNINGS #include< string.h> #include< stdio.h> #define SIZE 20 typedef struct {     char name [SIZE];     char艺术家[SIZE];     int duration; } 歌名; songname FillSong(); int main() {     songname songNumb1,songNumb2,songNumb3;     songNumb1 = FillSong();     songNumb2 = FillSong();     返回0; } 歌名FillSong() {     songname tempC;     的printf( “\ n”);     printf(“输入这首歌的名字:”);     scanf(“%s”,tempC.name);     printf(“name:%s \ n”,tempC.name);     printf(“谁是艺术家?”);     scanf(“%s”,tempC.artist);     printf(“artist:%s \ n”,tempC.artist);     printf(“持续时间(秒)是多少?”);     scanf(“%d”,& tempC.duration);     printf(“duration:%d \ n”,tempC.duration);     返回tempC; }

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

默认情况下,scanf将读取非空白字符的第一个设置。 考虑为歌曲名称或名称中可能有空格的任何内容阅读整行文本。

在某些情况下,您可能希望使用逗号或分号分隔字段,https://stackoverflow.com/a/40568616/5675174中给出的表达式将有助于此类情况

答案 2 :(得分:0)

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

语法:gets(变量名);

只有在输入新行时,获取功能才会停止获取输入。