【问题标题】:Display all men from a file on the screen in C在C的屏幕上显示文件中的所有男人
【发布时间】:2015-05-30 12:39:30
【问题描述】:

我是 C 的新手。 请问你能帮帮我吗。有一个结构名字,姓氏,性别,年龄。必须从键盘输入条目。我需要将此信息保存在一个文件中,然后在屏幕上显示所有性别 == Male 的条目并将它们保存在一个单独的文件中。 谢谢!

有一个从文件中读取结构的代码,但我不明白如何检查性别 == 男性。

#include "stdafx.h"
#include <cstdio>


int _tmain(int argc, _TCHAR* argv[])
{
    FILE *file;
    struct Person {
        char name[20]; 
        char gender[20]; 
        unsigned age; 
    };
    struct Person SinglePerson[10];
    char i=0;

    file = fopen("e:\\Test.txt", "r");

    while (fscanf (file, "%s%s%u", SinglePerson[i].name, &(SinglePerson[i].gender), &(SinglePerson[i].age)) != EOF) {
        printf("%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        i++;
    }

    file = fopen("e:\\fprintf.txt", "w");

    while (scanf ("%s%s%u", SinglePerson[i].name, &(SinglePerson[i].gender), &(SinglePerson[i].age)) != EOF) {
        fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        i++;
    }
    fread;

    return 0;
}

【问题讨论】:

  • 使用fopen打开文件,fwrite写入结构,fread读取。
  • @cdarke,您能否添加更多详细信息...如何检查性别 == 男性?
  • 您能否添加实际上是您正在处理的代码而不是一些与它无关的随机代码?
  • 您没有任何man 页面或文档可以查看基本信息吗?\
  • @SamiKuhmonen 谢谢,对不起......这是一个有效的代码。另一个任务的先前代码。

标签: c file structure


【解决方案1】:

工作!我做到了))

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define M 2 // M plus 1 is equals to number of structres

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

    FILE *file;
    struct Person {
        char name[20]; 
        char gender[20]; 
        unsigned age; 
    };
    struct Person SinglePerson[1];
    char i=0;
    char counter = 0;

void InputFromKeyboard () {
    file = fopen("Input.txt", "w");
    while(scanf("%s%s%u", SinglePerson[i].name, SinglePerson[i].gender, &(SinglePerson[i].age)) == 3 && i <= M) {
        fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        counter++;
        i++;
        if (i == M+1) {
            break;
        }
    }
    fclose(file);
};

void OutputToFile () {
    file = fopen("Output.txt", "w");
    for (i = 0; i < counter; i++) {
        if (strcmp(SinglePerson[i].gender, "Male") == 0) {
            fprintf(file, "%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        }
    }
    fclose(file);
}

void OutputToScreen () {
    file = fopen("Output.txt", "r");
    for (i = 0; i < counter; i++) {
        if (strcmp(SinglePerson[i].gender, "Male") == 0) {
            printf("%s %s %u\n", SinglePerson[i].name, SinglePerson[i].gender, SinglePerson[i].age); 
        }
    }
    fclose(file);
}

int main(int argc, char *argv[]) {
    InputFromKeyboard();
    OutputToFile();
    OutputToScreen();
    return 0;
}

【讨论】:

  • 干得好,你想通了!一个更好的测试将有多个条目。最好在使用它的函数中将i 设为局部变量。还要删除InputFromKeyboard 中的打开和关闭文件。
  • @Jongware 非常感谢!可以添加更多关于 InputFromKeyboard 的详细信息吗?
  • 嗯。毕竟,作为原始输入文件的示例,您似乎需要它。请忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多