为什么我的代码连续打印两次?我不明白问题所在

问题描述 投票:0回答:1
#include <stdio.h>

#define MAX_STRING_LENGTH 1024

int main(){ 

char input_name_string[MAX_STRING_LENGTH+1],motive_string[MAX_STRING_LENGTH+1];
printf("What is your name?\n");
scanf("%1024s",input_name_string);
printf("your name is %s \n", input_name_string);
printf("What is your motive?\n");
scanf(" %1024s",motive_string);
printf("your motive is %s \n", motive_string);
return 0; }

因此,我为学校的一个项目编写了这个简单的程序,以尝试学习scanf和printf的工作方式。由于某种原因,当它运行时,它会在一行中的每个字符串中打印第一个单词,然后在另一行中打印第二个单词。我不明白为什么会这样?我没有C方面的经验,但是代码中的逻辑似乎正确吗?任何建议

c printf scanf
1个回答
0
投票

您使用的带有转换格式说明符的函数scanf读取字符,直到遇到空格字符为止。

而不是使用功能fgets

例如

fgets( input_name_string, sizeof( input_name_string ), stdin );

该功能还可以将换行符附加到输入的字符串中。要删除它,您可以编写

#include <string.h>

/ …

input_name_string[ strcspn( input_name_string, "\n" ) ] = '\0';

关于您的格式说明符

scanf("%1024s",input_name_string); 

比在任何情况下都不正确。原始宽度应比字符数组的大小小1而不是1024,以为终止的零字符'\0'保留一个字符。

您可以写

scanf( "%1023[^\n]\n", input_name_string );
© www.soinside.com 2019 - 2024. All rights reserved.