#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方面的经验,但是代码中的逻辑似乎正确吗?任何建议
您使用的带有转换格式说明符的函数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 );