首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >printf转到不应该的新行

printf转到不应该的新行
EN

Stack Overflow用户
提问于 2021-12-01 23:23:11
回答 3查看 39关注 0票数 1

当我启动这两行代码时

代码语言:javascript
复制
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);

它给出了如下输出:

代码语言:javascript
复制
|name            |surname         |30              |
|name
           |surname
        |30              |

图片:

第二个printf调用中的变量是从其他函数中的user获取的,使用如下的fgets调用

代码语言:javascript
复制
fgets(database_publishers[pointer].name, STRING_SIZE, stdin);

在这个函数中没有任何\n,我不知道为什么它在新行中打印每个变量。顺便说一句,我在visual studio工作,也许这很重要,idk,我只是个编程新手。

EN

回答 3

Stack Overflow用户

发布于 2021-12-01 23:32:40

使用fgets读取的文本最有可能在末尾包含换行符。如果需要,您可以对其进行测试并将其删除。在尝试打印结果之前,尝试添加以下代码:

代码语言:javascript
复制
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。

否则,如果有换行符,输出将如下所示:

代码语言:javascript
复制
|name            |surname         |30              |
|name<newline>
<remaining whitespace> | <...>
票数 1
EN

Stack Overflow用户

发布于 2021-12-01 23:35:32

我添加了以下内容:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2021-12-01 23:35:00

您在程序中使用了"\n“。试着移除它

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70192485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档