gpt4 book ai didi

C - printf() 无法正常工作?

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:29 26 4
gpt4 key购买 nike

我正在编写一个简单的程序,以这种格式获取有关人员的数据: 姓名、年龄、性别、信息

它会像这样显示它们 [姓名: ,年龄: ,性别: ,信息:]

到目前为止,这是我的代码:

#include <stdio.h>

int main() {
char name[10];
int age;
char gender[2];
char info[50];

while(scanf("%9[^,],%i,%c,%49[^\n]", name, &age, gender, info) == 4) {
printf("[name: %s, age: %i, gender: %c, info: %s]\n", name, age, gender, info);
}

return 0;

所以我决定使用 > 将我的输出写入另一个文本文件。它不会正确显示,] 括号显示在新行上,[name: 单独显示。

这是我的输入:

 eliza,7,F,likes animals
bob,9,M,fast at running
sue,6,F,likes painting

输出是:

 [name: eliza, age: 7, gender: J, info: likes animals
]
[name:
bob, age: 9, gender: J, info: fast at running
]
[name:
sue, age: 6, gender: J, info: likes painting
]

有人可以帮忙吗?我不明白为什么它会这样打印数据,我尝试使用 strstr() 检查我的任何变量是否包含换行符。

最佳答案

您有两个问题。首先,我相信这是 Windows(或者至少你正在阅读的文件是在 Windows 中创建的),这意味着你有 \r\n 而不仅仅是 \n行结尾。您可以通过以文本模式打开文件来解决这个问题,但这是不可靠的;最好手动过滤掉多余的 \r

这就是在每个“信息”字段后添加换行符的原因。

第二个问题是您拒绝了信息字段中的 \n,因此它仍然作为后面“名称”字段的第一个字符存在,这就是为什么您在那里有额外的换行符.要修复它,只需在 scanf 字符串的开头放置一个空格(这将吞掉所有空格)

Inspired 指出了您的第三个问题(我没有注意到);您需要将性别视为字符而不是字符串。 “正确”的阅读方式是这样的:

char gender; // no need to have an array of characters
scanf( "blah %c blah", &gender );

然后像这样打印:

printf( "blah %c blah", gender );

关于C - printf() 无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com