Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
1

Проверить, является ли введенная строка названием страны, которые находятся в текстовом файле

27.05.2013, 18:15. Показов 970. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с реализацией идеи. К примеру у меня есть текстовый файл, в котором написаны названия стран с каждой новой строки. в программе я введу в отдельную строку название страны, и нужно, что бы в цикле как то проверило, является ли моя введенная строка названием какой то страны, которые находятся в текстовом файле. Просьба объяснить как можно с помощью функции fgets (возможно как то по-другому) сравнивать с каждой строкой из текстового файла к примеру функцией strcmp.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2013, 18:15
Ответы с готовыми решениями:

Проверить, является ли введенная строка символов названием месяца
проверить является ли,введеная строка символов названием месяца. Я написал прогу,но она вылетает,...

Проверить является ли введенная строка палиндромом
Объясните как это работает , желательно с комментариями возле кода #include"stdio.h" ...

Проверить, является ли введенная строка палиндромом
Написать программу, которая проверяет, является ли введенная строка палиндро- мом "А роза упала...

Проверить, является ли введенная строка восьмеричным числом
Добрый вечер! Помогите пожалуйста. Написать программу которая проверяет является ли введенная...

5
9 / 9 / 8
Регистрация: 22.05.2013
Сообщений: 22
27.05.2013, 18:25 2
Сравниваем по strcmp пока не конец файла. fin - указатель на входной файл, s - строка которую ввели, ps - строка которую прочли. Изначально х=0
C
1
2
3
4
5
while(fgets(ps,200,fin)!=NULL)
  if(strcmp(s,ps)==0){
    printf("Страна найдена");
    break;
  }
1
141 / 110 / 30
Регистрация: 20.04.2011
Сообщений: 582
27.05.2013, 18:26 3
Как-то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main (void)
{
    FILE *file = fopen ("file.txt", "r" );
    if ( file != NULL )
    {
        char line [ 128 ]; /* для хранения строки  */
        while (fgets(line, 128, file) != NULL ) /* чтение строки */
        {
            if (strcmp ("Сомали", line) == 0)
            {
               /* страна есть, делаем тут что надо с ней */
              
              break; /* выход из цикла чтения файла */
            }           
        }
    
        fclose ( file );
    } 
    
    return 0;
}
1
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
30.05.2013, 17:39  [ТС] 4
Хочу зделать так, что бы в нужный массив записывало только ту страну, которая есть в файле, а если название введено не верно, то вводить приходилось бы заново. Составил код, но работает не понятно: останавливает цикл только тогда, когда первый раз вводишь правильно, если хоть раз ошибся - цикл не останавливает считывание строк, даже если потом ввести верно. Помогите реализовать, пожалуйста.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX 15
main()
{
char mcmain[MAX], mc0[MAX], mc1[MAX];
FILE *f=fopen("countr.txt","r");
do
 {
  gets(mc1);
  while(fgets(mc0,MAX,f)!=NULL)
   {
    if(strcmp(mc1,mc0)==0) strcpy(mcmain,mc1);
   }
 } while(strcmp(mcmain,mc1)!=0);
fclose(f);
puts(mcmain);
getch();
return 0;
}
0
9 / 9 / 8
Регистрация: 22.05.2013
Сообщений: 22
30.05.2013, 23:13 5
Цитата Сообщение от Novi4ekC Посмотреть сообщение
Хочу зделать так, что бы в нужный массив записывало только ту страну, которая есть в файле, а если название введено не верно, то вводить приходилось бы заново. Составил код, но работает не понятно: останавливает цикл только тогда, когда первый раз вводишь правильно, если хоть раз ошибся - цикл не останавливает считывание строк, даже если потом ввести верно. Помогите реализовать, пожалуйста.
Думаю, незачем каждый раз вызывать не совсем быструю функцию strcmp, легче внести какой-то признак нахождения совпадения в файле.
C
1
2
3
4
5
6
7
8
9
10
  int k=0;
  do{
    gets(mc1);
    while(fgets(mc0,MAX,f)!=NULL)
      if(strcmp(mc1,mc0)==0){ 
        strcpy(mcmain,mc1);
        k=1;
      }
  } 
  while(k==0);
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
31.05.2013, 09:03  [ТС] 6
Цитата Сообщение от s7ealth Посмотреть сообщение
Думаю, незачем каждый раз вызывать не совсем быструю функцию strcmp, легче внести какой-то признак нахождения совпадения в файле.
C
1
2
3
4
5
6
7
8
9
10
  int k=0;
  do{
    gets(mc1);
    while(fgets(mc0,MAX,f)!=NULL)
      if(strcmp(mc1,mc0)==0){ 
        strcpy(mcmain,mc1);
        k=1;
      }
  } 
  while(k==0);
Та же история. Если ввожу первый раз неправильно, то потом уже не останавливается цикл считывания строк.

Добавлено через 14 минут
Возможно после первого прохода цикла
C#
1
while(fgets(mc0,MAX,f)!=NULL)
указатель остается в конце файла?
0
31.05.2013, 09:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2013, 09:03
Помогаю со студенческими работами здесь

Проверить, является ли строка, введённая с клавиатуры, палиндромом
ЗАдание следующее: Написать программу, которая проверяет, является ли строка, введённая с...

Cтрока: Проверить, является ли введенная с клавиатуры строка палиндромом?
Проверить является ли введенная с клавиатуры строка палиндромом(т.е. слева на право и справа на...

Проверить, является ли введенная с клавиатуры строка шеснадцатеричным числом
1.Написать программу которая проверяет является ли введенная с клавиатуры строка шеснадцатеричным...

Проверить, является ли введенная с клавиатуры строка целым числом
2.Написать программу, которая проверяет, является ли введенная с клавиатуры строка целым числом.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru