繁体   English   中英

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

[英]C - printf() not working correctly?

我正在编写一个简单的程序,该程序以以下格式接收有关人的数据:姓名,年龄,性别,信息

并以如下方式显示它们:[姓名:,年龄:,性别:,信息:]

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

#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

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

第二个问题是您拒绝了\\n信息字段,因此它仍然是后面的“名称”字段的第一个字符,这就是为什么您在此处有多余的换行符的原因。 要解决此问题,只需在scanf字符串的开头放置一个空格(它将吞没所有空白)

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

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

并打印如下:

printf( "blah %c blah", gender );
#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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM