当我启动这两行代码时
printf("|%-16s|%-16s|%-16d|\n","name","surname", 30);
printf("|%-16s|%-16s|%-16d|\n", database_publishers[pointer1].name, database_publishers[pointer1].client, database_publishers[pointer1].price);它给出了如下输出:
|name |surname |30 |
|name
|surname
|30 |图片:

第二个printf调用中的变量是从其他函数中的user获取的,使用如下的fgets调用
fgets(database_publishers[pointer].name, STRING_SIZE, stdin);在这个函数中没有任何\n,我不知道为什么它在新行中打印每个变量。顺便说一句,我在visual studio工作,也许这很重要,idk,我只是个编程新手。
发布于 2021-12-01 23:32:40
使用fgets读取的文本最有可能在末尾包含换行符。如果需要,您可以对其进行测试并将其删除。在尝试打印结果之前,尝试添加以下代码:
size_t length = strlen(database_publishers[pointer].name);
if(database_publishers[pointer].name[length - 1] == '\n')
database_publishers[pointer].name[length - 1] = '\0';另外,参见awnser,上面基本上就是this awnser。
否则,如果有换行符,输出将如下所示:
|name |surname |30 |
|name<newline>
<remaining whitespace> | <...>发布于 2021-12-01 23:35:32
我添加了以下内容:
database_publishers[pointer].name[strcspn(database_publishers[pointer].name, "\n")] = 0;
database_publishers[pointer].client[strcspn(database_publishers[pointer].client, "\n")] = 0;在fgets调用之后,现在它就像我在这里找到的那样工作:Removing trailing newline character from fgets() input
发布于 2021-12-01 23:35:00
您在程序中使用了"\n“。试着移除它
https://stackoverflow.com/questions/70192485
复制相似问题