0

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

它会像这样显示它们 [name: , age: , gender: , info: ]

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

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

4

2 回答 2

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 );
于 2013-06-09T16:58:15.593 回答
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;
}
于 2013-06-09T17:05:44.887 回答