Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++] Не выводит значения

29K
24 ноября 2007 года
dim88
9 / / 02.11.2007
Всем привет. Не получается вывести необходимые значения. Подскажите плз, где я напортачил..)

Вообщем, есть текстовый док: фамилия, имя, отчество, адрес (город, улица, дом, квартира), телефон (если есть).
Задача: вывести фамилии и телефоны всех лиц, проживающих в г. Саратове на улице Солнечной.

Текстовый док dannie.txt:
 
Код:
5
Aleksey Vakutagin Alekseevi4 Saratov Solne4na9 5 12 1452692
Vitaliy Bobrikov Mihaylovi4 Kiev Loh 66 11 1236978
Grigoriy Koltugin Ivanovi4 Moskva Qqqq 98 11 9854755
Vladimir Putin Vladimirovi4 Saratov Solne4na9 2 32 6394592
Maria Durkova Aleksandrovna Leningrad Solne4na9 5 12 4584876


Текст программы:
Код:
#pragma argsused
#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()
{
typedef struct {int nu;
                char imya;
                char familiya;
                char ot4estvo;
                char gorod[20],ulica[20];
                int dom,kvartira;
                int tel;
                }TDANNIE;
TDANNIE dannie;
FILE *fp;
 int n,i,k;
char filename[30];
printf("\n Input filename :");
scanf("%s",&(filename));
fp=fopen(filename,"rt");
if (fp==NULL) {
   printf("file not opened =)"); getch(); return ;}
fscanf(fp,"%d",&n);
printf("n=%d:",n);
k=0;
for (i=0;i<n;i++)
{dannie.nu=i+1;
printf("\n %d", dannie.nu);
fscanf(fp,"%s%d%d%d",&(dannie.familiya),&(dannie.gorod),&(dannie.ulica),&(dannie.tel));
if ((strcmpi(dannie.gorod,"Saratov")==0) && (strcmpi(dannie.ulica,"Solne4naya")==0))
       {k=k+1;
       printf("\n V Saratove na ulice Solne4na9 projivaut \n");
          }
          }
   if (k==0)
        printf("\n Nikto ne projivaet \n");
        fclose(fp);
        getch();

        return;
        }
489
24 ноября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: dim88
Всем привет. Не получается вывести необходимые значения. Подскажите плз, где я напортачил..)

Вообщем, есть текстовый док: фамилия, имя, отчество, адрес (город, улица, дом, квартира), телефон (если есть).
Задача: вывести фамилии и телефоны всех лиц, проживающих в г. Саратове на улице Солнечной.

Текстовый док dannie.txt:
 
Код:
5
Aleksey Vakutagin Alekseevi4 Saratov Solne4na9 5 12 1452692
Vitaliy Bobrikov Mihaylovi4 Kiev Loh 66 11 1236978
Grigoriy Koltugin Ivanovi4 Moskva Qqqq 98 11 9854755
Vladimir Putin Vladimirovi4 Saratov Solne4na9 2 32 6394592
Maria Durkova Aleksandrovna Leningrad Solne4na9 5 12 4584876


Текст программы:
Код:
#pragma argsused
#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()
{
typedef struct {int nu;
                char imya;
                char familiya;
                char ot4estvo;
                char gorod[20],ulica[20];
                int dom,kvartira;
                int tel;
                }TDANNIE;
TDANNIE dannie;
FILE *fp;
 int n,i,k;
char filename[30];
printf("\n Input filename :");
scanf("%s",&(filename));
fp=fopen(filename,"rt");
if (fp==NULL) {
   printf("file not opened =)"); getch(); return ;}
fscanf(fp,"%d",&n);
printf("n=%d:",n);
k=0;
for (i=0;i<n;i++)
{dannie.nu=i+1;
printf("\n %d", dannie.nu);
fscanf(fp,"%s%d%d%d",&(dannie.familiya),&(dannie.gorod),&(dannie.ulica),&(dannie.tel));
if ((strcmpi(dannie.gorod,"Saratov")==0) && (strcmpi(dannie.ulica,"Solne4naya")==0))
       {k=k+1;
       printf("\n V Saratove na ulice Solne4na9 projivaut \n");
          }
          }
   if (k==0)
        printf("\n Nikto ne projivaet \n");
        fclose(fp);
        getch();

        return;
        }



1) в структуре char imya итд, а должно быть как минимум char imya[50]; у тебя же в фамилии не одна буква, а массив..
2) fscanf(fp,"%s %s %s %s",&(dannie.familiya),&(dannie.gorod),&(dannie.ulica),&(dannie.tel)); - это же параметризированное считывание строки, т.е. если строка: символы пробел символы. То и читать надо %s(символы) пробел %s(символы).
Надеюсь доступно объяснил.

29K
24 ноября 2007 года
dim88
9 / / 02.11.2007
Да, спасибо, объяснил доступно).. Исправил, но пока все равно не выводит.. *думаю*
489
24 ноября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: dim88
Да, спасибо, объяснил доступно).. Исправил, но пока все равно не выводит.. *думаю*



Для корректной работы: вот такой должен быть fscanf():

 
Код:
fscanf(fp,"%s %s %s %s %s %d %d %d",&dannie.imya,&dannie.familiya,&dannie.ot4estvo,&dannie.gorod,&dannie.ulica,&dannie.dom,&dannie.kvartira,&dannie.tel);

А теперь вот так надо изменить твой if()
 
Код:
if ((strcmpi(dannie.gorod,"Saratov")==0) && (strcmpi(dannie.ulica,"Solne4na9")==0))


А теперь объясняю:
1) такой иф. потому что у тебя такая строка, если не указываешь полное формирование строки, то оно будет тебе читать. столько сколько ты указал в fscanf()
2) у тебя в txt файле не Solne4naya, а Solne4na9 - будь внимательнее.
3) в структуре переделай char в массив char'ов
ЗЫ: А вообще простой дебаггер это все показывает.
ЗЫЫ: вместо спасибо, лучше используй репутацию, т.е. отзыв:-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог