Найти в документе вводимые имя, фамилию и группу - C (СИ)
Формулировка задачи:
необходимо что бы программа при нажатии 3 позволяла искать в документе вводимые имя фамилию и группу и затем выводила на экран нашедшее
// 10.09.11.cpp: определяет точку входа для консольного приложения.
//программа берёт введённые данные и записывает их в файл
#include "stdafx.h"
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
char* data[30],c[30],v[20];
char* fileData;
char* userData;
int flag = 0;
FILE * f;
if((f=fopen("c:\i.txt","w"))== NULL)
{
printf("error");
}
else
{
while((!feof(f))&&flag!=1)
{
printf("Print your name please:\n "); //вводим имя
scanf("%s %s %s",&data,&c,&v); //скан имени
fprintf(f,"\n %s %s %s",data,c,v); // пишем в файл
printf("Enter 1 to exit \n key 0 if you have many student\n");
scanf("\n %d",&flag);
}
fclose(f);
}
if((f=fopen("c:\i.txt","r"))== NULL)
{
printf("error");
}
else
{
while((!feof(f))&&flag!=2)
{
fscanf(f,"\n %s %s %s",&data,&c,&v);
printf("%s %s %s \n", data,c,v);
scanf("\n %d",&flag);
}
fclose(f);
}
while((!feof(f))&&flag!=3)
{
//read in file to fileData variable
if((f=fopen("c:\i.txt","r"))== NULL)
{
fscanf(fileUser, "%s %s %s" &fileData);
if(strcmp (fileData,userData)==0)
{
/*while(*str1 && *str2)
{
if(*str1>str2) return 1;
if(*str1<str2) return -1;
str1++; str2++;
}
return 0;
*/
}
}
}
компилятор Visual Studio 2010
Решение задачи: «Найти в документе вводимые имя, фамилию и группу»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void) {
int test;
char first_name[32], last_name[32], group[24], data[32];
FILE* fp = fopen("D:\\students.txt", "r");
if(! fp)
exit(1);
*first_name = *last_name = *group = '\0';
while(1) {
printf("enter name:");
scanf("%s", data);
test = 0;
while(fscanf(fp, "%s %s %s", first_name, last_name, group) == 3) {
if(! strcmp(first_name, data)) {
test = 1;
printf("student: %s %s, group: %s\n\n", first_name, last_name, group);
break;
}
}
rewind(fp);
if(! test)
printf("\t Not found %s-student !\n", data);
}
fclose(fp);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками
- Объявление переменных:
test- для контроля выхода из циклаfirst_name,last_name,group- для хранения имени, фамилии и группыdata- для временного хранения введенных пользователем данныхfp- для открытия файла
- Установка начальных значений для переменных
first_name,last_name,groupравными нулю, что означает отсутствие имени, фамилии и группы - Вектор цикла while(1), который будет выполняться до тех пор, пока пользователь не введет команду для его остановки
- Вывод сообщения с просьбой ввести имя для поиска
- Внутри цикла while(1) выполняется цикл while(fscanf(fp,
%s %s %s, first_name, last_name, group) == 3), который будет выполняться до тех пор, пока не будет прочитано три строки (имя, фамилия и группа) - Внутри внутреннего цикла while сравнивается введенное пользователем имя с именем студента в файле. Если имена совпадают, то переменной
testприсваивается значение 1 и выводится информация о найденном студенте - Если информация о студенте найдена, то файл считывается обратно с помощью функции rewind(fp) для поиска следующего студента
- Если информация о студенте не найдена, то выводится сообщение об этом
- После выхода из внутреннего цикла while закрывается файл с помощью функции fclose(fp)
- Возвращается значение 0, что означает успешное выполнение программы