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

时间:2013-06-09 16:52:51

标签: c printf

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

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

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

#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()检查我的任何变量是否包含新行字符。

2 个答案:

答案 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;
}