Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
#1

Не считывает с файла - C++

25.06.2012, 10:39. Просмотров 673. Ответов 10
Метки нет (Все метки)

Друзья, вообщем написал программку, в которой вводятся шесть строк, в каждой по одному слову, затем вводишь символ и начинается сравнение: если символ этот совпадает с первой буквой какого либо слова в строке, то прога выводит эту самую строку.
Только вот в чем дело, надо файл создать в проекте в папке самой, я создал, t.txt, в нем ввел шесть строк в каждой по слову, так вот программа должна уже оотуда считывать а у меня ошибку выдает( ДОЛЖНО СЧИТЫВАТЬ СТРОКИ С ФАЙЛА, ВВОДИТЬ ИХ НЕ НАДО, В ФАЙЛЕ УЖЕ НАПЕЧАТАЛ!
вот код программы, кто знает, помогите)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "string.h"
#define n 6
 
struct grep
{
    char string[15];
};
 
void main()
{
    struct grep b[6];
    char s;
    setlocale(LC_ALL, "rus");
    FILE *pc;
    pc=fopen("t.txt","r");
    printf("Введите символ: ");
    scanf("%s", &s);
    rewind(pc);
    while(!feof(pc))
    {
        for(int i=0; i<n; i++)
        {
            if(b[i].string[0]==s)
            {
                fwrite(&b[i],sizeof(struct grep),1,pc);
                printf("%d) %s \n", i+1, b[i].string);
            }
        }
    fclose(pc);
    break;
}
_getch();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 10:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не считывает с файла (C++):

Написать программу которая считывает считывает текст из файла и записывает в другой слова состоящие не менее чем из 7 букв - C++
Написать программу которая считывает считывает текст из файла и записывает в другой слова состоящие не менее чем из 7 букв Мне кажется...

Не считывает с файла - C++
Приношу извинения. Уже разобрался)

Неправильно считывает с файла - C++
Не могу понять в чем ошибка??? функция eof должна считывать с файла до пробела?? Т.е если в файле данные расположены так: а b ...

Не считывает список с файла - C++
Есть такой вот кусок кода. struct worker { char fam; char name; char position; int year; worker *next; }; worker...

Не правильно считывает из файла - C++
при первом заходе считыват всё правильно, но начиная со второго он начинает странно считывать #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Криво считывает из файла - C++
Ситуация такая. Есть файл base.txt, там есть номера телефонов (по 11 символов каждый), пример ниже 79372937738 79277394843 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
koma3
0 / 0 / 0
Регистрация: 24.09.2011
Сообщений: 66
25.06.2012, 11:05 #2
Укажи лучше полный путь к файлу.
0
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
25.06.2012, 11:16  [ТС] #3
в каком месте путь указать?
0
koma3
0 / 0 / 0
Регистрация: 24.09.2011
Сообщений: 66
25.06.2012, 11:40 #4
ты пишеш
C
1
pc=fopen("t.txt","r");
попробуй вместо "t.txt" указать полный путь к t.txt, например "D:\\projects\\my_project\\t.txt" (короче путь к проэкту)
0
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
25.06.2012, 11:43  [ТС] #5
пробовал, толку нет
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 12:08 #6
Как и сказали выше, лучше для понимания использовать полный путь к файлу. Проверь по шагам что возвращает функция fopen - открывает она файл или нет.(Понятное дело, если файла по пути нема, то он и не откроется) Что за ошибку выдает? Чтобы считывать из файла достаточно спользовать функцию fscanf, либо можно ничего не менять, а вместо вызова fopen поставить строку freopen(путь к файлу, "r", stdin);. Тогда поток ввода будет переброшен на твой файл, и из файла можно будет читать с помощью scanf.

Добавлено через 2 минуты
Функцию fwrite - используют для считывания из бинарных файлов, так что для считывания текста ее использование не желательно. Лучше использовать fscanf, ну или любые похожие функции.
1
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
25.06.2012, 12:11  [ТС] #7
Я вот также указал полный путь к файлу, и сделал freopen, а программа при запуске сразу ошибку выдает
Debug Assertion Failed, потом путь указан какой то, потом Expression: (stream != NULL) 44 line

вот прогу как исправил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "string.h"
#define n 6
 
struct grep
{
    char string[15];
};
 
void main()
{
    struct grep b[6];
    char s;
    setlocale(LC_ALL, "rus");
    FILE *pc;
    pc=freopen("I:\Grep\Debug\t.txt","r", stdin);
    printf("Введите символ: ");
    scanf("%s", &s);
    while(!feof(pc))
    {
        for(int i=0; i<n; i++)
        {
            fread(&b[i],sizeof(struct grep),1,pc);
            if(b[i].string[0]==s)
            {
                fwrite(&b[i],sizeof(struct grep),1,pc);
                printf("%d) %s \n", i+1, b[i].string);
            }
        }
    fclose(pc);
    _getch();
    }
 
}
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 12:14 #8
Попробуй заменить твой путь "I:\Grep\Debug\t.txt" на "I:\\Grep\\Debug\\t.txt". Обратный слешь используется для управляющих символов(типа \n \r и т.д.)Поэтому, чтобы задать просто символ обратного слеша, то приходится писать \\.
1
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
25.06.2012, 12:18  [ТС] #9
точно такую же ошибку выдает, и постоянно ругается на какую то 44 линию, хотя у меня по-моему нет столько строчек в программе, может программка неправильно конец файла находит?
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.06.2012, 12:23 #10
Кстати, я тебя походу обманул. Не стоит использовать freopen, ведь он перенаправляет ВЕСЬ поток ввода. Т.е. когда ты запросишь ввести символ, то он этот символ будет читать из файла. Поэтому, лучше оставить fopen, не забудь про проверку открытия файла Типа:
C
1
2
3
4
5
if (pc == NULL) {
  printf("Файл не найден!\n");
  system("pause");
  return;
}
Добавлено через 5 минут
А почему ты расчитываешь, что все заработает, если исправить всего одну строчку сотткрытием файла? Кстати, я тока заметил - почему ты используешь fwrite?? Зачем тебе писать в файл, если ты из него считываешь??? Тем более ты открыл файл только для чтения, понятное дело, если ты попытаешься записать в файл, то выдастся ошибка.
1
kirya
-9 / 2 / 0
Регистрация: 01.06.2012
Сообщений: 87
25.06.2012, 12:24  [ТС] #11
а это мне надо поставить перед циклом while эту проверку, типа если файл пуст, то файл не найден, ИНАЧЕ пока не конец файла, считываем все, да???
а вот system("pause") - это какую библиотеку надо, а можно exit(1) использовать?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 12:24
Привет! Вот еще темы с ответами:

не считывает текст из файла - C++
Добрый вечер всем. вот собсна код, который не хочет работать из файла. #include &quot;iostream&quot; #include &quot;time.h&quot; #include &quot;conio.h&quot; ...

Не считывает структуру с файла - C++
Добрый день. Мне необходимо считать данные структуры с файла и записать их в другой файл. Почему-то он отказывается это делать. ...

Не считывает данные из файла - C++
Дано задание (полностью писать не буду не имеет смысла) &quot;... также создать функции ввода и вывода массива из файла SaveArray и LoadArray.&quot;...

считывает текст из файла - C++
Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.06.2012, 12:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru