我正在写一个简单的程序,它以这种格式获取有关人员的数据: 姓名,年龄,性别,资讯
它会像这样显示它们 [姓名:,年龄:,性别:,信息:]
到目前为止,这是我的代码:
#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;
}
所以我决定使用&gt;将输出写入另一个文本文件。并且它没有正确显示,]括号显示在一个新行和[名称:单独。
这是我的意见:
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()检查我的任何变量是否包含新行字符。
答案 0 :(得分:3)
你有两个问题。首先,我认为这是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 );
答案 1 :(得分:0)
#include <stdio.h>
int main(void) {
char name[10];
int age;
char gender;//change
char info[50];
while(scanf("%9[^,],%i,%c,%49[^\n]%*c", name, &age, &gender, info) == 4) {
printf("[name: %s, age: %i, gender: %c, info: %s]\n", name, age, gender, info);
}
return 0;
}