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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
#1

Работа с текстовым файлом в Visual Studio - C++

02.12.2013, 03:45. Просмотров 2581. Ответов 36
Метки нет (Все метки)

Программа компилится, но не может открыть файл studenti.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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <stdio.h>
#include <conio.h>
#include <string.h>                             //libraries
#include <windows.h>
#include <iostream>
 
#define N 20
 
int main()
{
    struct individual                           //define structure for  
    {
        // Nr., Name, Surname, DOB
        int Nr;
        char name[30], surname[30];
        struct birth
        {
            int day;                                  //hell yeah a structure within a structure
            int month;                                //INCEPTION
            int year;
        }date;
    }student[N], temp[1];
    int i, j, last, out, choice, exists;         //some handy variables
 
 
 
    FILE *list;                                 //will be operating in two files
    FILE *list_sorted;                          //original and edited
    errno_t err;
    system("cls");
    out = 0;                                      //initialize some stuff
    j = 0;
    exists = 0;
    last = 0;
 
    do                                          //a while loop for menu
    {
        //useful stuff. but takes a shitton of time to debug
        system("cls");
        printf("MENU:\n1.Aizpildit sarakstu no faila.'studenti.txt'.\n2.Papildinat sarakstu ar rokam.\n");
        printf("3.Paradit sarakstu.\n4.Atrast studentu, kura vards un uzvards atbilst lietotaja ievaditajiem datiem\n5.Iziet\n");
        scanf_s("%d", &choice);
        switch (choice)
        {
        case 1:                                                                //case 1 to scan a file and read all data from it.
        
            if ((err = fopen_s(&list,"studenti.txt", "r")) == NULL) {
    
 
                printf("Nevar atvert failu \n");
                system("pause");
                exit(1);
            }
 
            for (i = 0; i < N; i++)
            {
                //since there is no way to return the number of the lines in a file
                fscanf_s(list, "%d", &student[i].Nr);           //and if we try to return a nonexistent line, it will se the pointer to the end of line
                fscanf_s(list, "%s", &student[i].name);         //the return will be gibberish, but the pointer will stand on the same way before 
                fscanf_s(list, "%s", &student[i].surname);      //and after the attempt to read stuff.
                fscanf_s(list, "%d", &student[i].date.day);     //therefore, if we see that pointer position doesnt change, we know ir is at the end.fscanf(list, "%1c");
                fscanf_s(list, "%d", &student[i].date.month);   //if so, we break out of the loop for it is set to go through the maximum list size N.
                fscanf_s(list, "%d", &student[i].date.year);
                if (feof(list))
                {
                    last = i;
                    break;
                }
            }
            fclose(list);
            exists = 1;                                    //tiny variable for later use, to avoid processing empty list
 
            break;
 
 
        case 2:
            choice = 0;
            while (choice != 1)
            {
                student[last].Nr = last;
                printf("\nIevadiet %d. studenta informaciju\n", last);
                printf("Vards: ");
                scanf_s("%s", &(student[last].name));
                printf("Uzvards: ");
                scanf_s("%s", &(student[last].surname));                            //manual input of data into structure.
                printf("Dzimshanas datums. DIENA: ");
                scanf_s("%2d", &(student[last].date.day));
                printf("Dzimshanas datums. MENESIS: ");
                scanf_s("%2d", &(student[last].date.month));
                printf("Dzimshanas datums. GADS: ");
                scanf_s("%2d", &(student[last].date.year));
                printf("\n Pievienot vel? (1=beigt)");                            //in order to give user the freedom to choose how many
                scanf_s("%d", &choice);                                             //items to add, we ask him at the end of every loop.
                last++;                                                           //this way ca avoid making him write in t once 20 lines.
            }
            exists = 1;
            break;
 
 
        case 3:
            system("cls");
            if (exists > 0)                                                        //here's where we need the exists variable. if we don't have
            {
                //a check for structure existance, the compiler goes bananas trying to print. 
                printf("Studentu saraksts:\n");
                for (i = 0; i < last; i++)
                {
                    printf("%2d%15s%15s%10d.%2d.%2d\n", student[i].Nr, student[i].name, student[i].surname,
                        student[i].date.day,
                        student[i].date.month,
                        student[i].date.year);
                }
            }
            else printf("Ludzu izveidojiet sarakstu!\n");
            system("pause");
 
 
 
        case 4:
            system("cls");
            if (exists > 0)
            {
                printf("Ievadiet studenta vardu:\n");
                scanf_s("%s", &(student[j].name));
                printf("Ievadiet studenta uzvardu: ");
                scanf_s("%s", &(student[j].surname));
 
                for (j = 0; j < last; j++)
                {
                    for (i = 0; i < last; i++)
                    {
                        if (student[i].name == student[j].name && student[i].surname == student[j].surname)
                        {
                            printf("Saraksta ir tads students un atrodas %d pozicija\n", i);
                        }
                        else {
                            printf("Tada studenta saraksta nav\n");
                        }
                        
                        }
                    }
                }
                
            
            else printf("Ludzu izveidojiet sarakstu!\n");
            system("pause");
            break;
 
        
 
 
        case 5:
            out = 1;
            break;
 
 
        default:
            system("cls");
            printf("Ludzu izveidojiet sarakstu!\n");
            system("pause");
            break;
 
        }
    }
    while (out!=1);
    out = 0;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 11:27     Работа с текстовым файлом в Visual Studio #2
Цитата Сообщение от PapaKarlito Посмотреть сообщение
Куда этот файл точно кидать, что бы программа его находила?
В папку проекта, или полный путь прописывать. Узнать точно можно так: открываете файл для записи, где файл появился, там должны находиться и файлы для чтения.
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 12:23     Работа с текстовым файлом в Visual Studio #3
PapaKarlito, например, путь к папке может выглядеть так: C:\Users\Александр\Documents\Visual Studio 2010\Projects\Сдвиги\Сдвиги
либо полный путь к файлу.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 16:14  [ТС]     Работа с текстовым файлом в Visual Studio #4
Я кидал в папку проекта, но не считывается файл.
Могли бы еще проверить саму программу, может я там где то еще накосячил?
InFile вот такой:
0 Filip Kirkorov 32 12 65
1 Valentin Strikalo 22 03 92
2 Maksim Galkin 12 08 66
3 Aragorn Berestov 06 02 67
4 Peter Griffin 22 04 55
5 Aleksandr Pushkin 13 07 22
6 Peter Pervij 28 12 52
7 Anna Ahmatova 12 07 22
8 Aleksandr Makedonskij 12 02 22

заранее спасибо)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 16:20     Работа с текстовым файлом в Visual Studio #5
Цитата Сообщение от PapaKarlito Посмотреть сообщение
Я кидал в папку проекта, но не считывается файл.
Не считывается или не открывается?
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 16:42     Работа с текстовым файлом в Visual Studio #6
PapaKarlito, а вы его перед компиляцией программы закрыли? указываете с форматом .txt?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 17:25  [ТС]     Работа с текстовым файлом в Visual Studio #7
Liden, закрыл и в программе указываю как studenti.txt

Добавлено через 30 секунд
alsav22, вот тут даже точно не скажу
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 17:41     Работа с текстовым файлом в Visual Studio #8
Цитата Сообщение от PapaKarlito Посмотреть сообщение
вот тут даже точно не скажу
Как так? У вас же стоит проверка на отрытие файла для чтения:
C++
1
2
3
4
5
6
7
8
9
case 1:                                                                //case 1 to scan a file and read all data from it.
        
            if ((err = fopen_s(&list,"studenti.txt", "r")) == NULL) {
    
 
                printf("Nevar atvert failu \n");
                system("pause");
                exit(1);
            }
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 17:45  [ТС]     Работа с текстовым файлом в Visual Studio #9
да, но я не знаю находит ли прога сам файл вообще
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 17:58     Работа с текстовым файлом в Visual Studio #10
Зачем вы эти прибамбасы microsoft используете? Есть стандартные функции для работы с файлами. Тут проверка на открытие неправильно сделана, поэтому и непонятно.
Для fopen_s() возвращаемое значение:
Нуль, если успешно; код ошибки при неудаче. Дополнительные сведения см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr об этих кодах ошибок.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 18:21  [ТС]     Работа с текстовым файлом в Visual Studio #11
по другому studio ошибку выдает и не хочет компилиться
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 18:26     Работа с текстовым файлом в Visual Studio #12
Цитата Сообщение от PapaKarlito Посмотреть сообщение
по другому studio ошибку выдает и не хочет компилиться
По другому что? Стандартные функции почему не используете?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 18:35  [ТС]     Работа с текстовым файлом в Visual Studio #13
по другому не получалось, вот и пришлось выкручиваться. Нам преподают С, а тут то С++

Добавлено через 58 секунд
если не использовать errno_t
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 18:48     Работа с текстовым файлом в Visual Studio #14
Цитата Сообщение от PapaKarlito Посмотреть сообщение
Нам преподают С
Я и говорю про стандартные функции С. Вот так у меня работает (1 и 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
24
25
26
27
28
29
case 1:                                                                //case 1 to scan a file and read all data from it.
        
            if ((list = fopen("studenti.txt", "r")) == NULL) 
            {
                printf("Nevar atvert failu \n");
                system("pause");
                exit(1);
            }
 
            for (i = 0; i < N; i++)
            {
                //since there is no way to return the number of the lines in a file
                fscanf(list, "%d", &student[i].Nr);           //and if we try to return a nonexistent line, it will se the pointer to the end of line
                if (feof(list))
                {
                    last = i;
                    break;
                }
                fscanf(list, "%s", student[i].name);         //the return will be gibberish, but the pointer will stand on the same way before 
                fscanf(list, "%s", student[i].surname);      //and after the attempt to read stuff.
                fscanf(list, "%d", &student[i].date.day);     //therefore, if we see that pointer position doesnt change, we know ir is at the end.fscanf(list, "%1c");
                fscanf(list, "%d", &student[i].date.month);   //if so, we break out of the loop for it is set to go through the maximum list size N.
                fscanf(list, "%d", &student[i].date.year);
                
            }
            fclose(list);
            exists = 1;                                    //tiny variable for later use, to avoid processing empty list
 
            break;
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 19:21  [ТС]     Работа с текстовым файлом в Visual Studio #15
посоветуйте тогда нормальный компилятор, что бы на 8 винду шел, а то со студио всегда надо с бубном танцевать)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 19:43     Работа с текстовым файлом в Visual Studio #16
Цитата Сообщение от PapaKarlito Посмотреть сообщение
а то со студио всегда надо с бубном танцевать
У меня 10 студия, и ничего, не танцую с бубном.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 19:54  [ТС]     Работа с текстовым файлом в Visual Studio #17
всеравно у меня не хочет текстовой файл находить, написал вместо err,так как вы предложили, все скомпилилось.
моли бы вы вообще затестить прогу, если не трудно, может еще какие ошибки нашли бы? был бы очень благодарен)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 20:01     Работа с текстовым файлом в Visual Studio #18
Пишите ясней. Я не понял: файл и сейчас не находит? Т.е., при выборе 1-го пункта меню, выводится сообщение: "Nevar atvert failu" ?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 20:06  [ТС]     Работа с текстовым файлом в Visual Studio #19
дап, именно так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 20:10     Работа с текстовым файлом в Visual Studio
Еще ссылки по теме:
C++ Работа с текстовым файлом
Работа с текстовым файлом C++
C++ Работа с текстовым файлом С++
C++ Работа с текстовым файлом
Работа с текстовым файлом C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 20:10     Работа с текстовым файлом в Visual Studio #20
Файл вручную создавали? Расширения файлов, в системе, видны?

Добавлено через 1 минуту
И код, который пробуете, покажите.
Yandex
Объявления
02.12.2013, 20:10     Работа с текстовым файлом в Visual Studio
Ответ Создать тему
Опции темы

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