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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 03:45     Работа с текстовым файлом в Visual Studio #1
Программа компилится, но не может открыть файл 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 03:45     Работа с текстовым файлом в Visual Studio
Посмотрите здесь:

Работа с текстовым файлом C++
работа с текстовым файлом C++
C++ Работа с текстовым файлом
C++ Работа с текстовым файлом
работа с текстовым файлом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 20:13  [ТС]     Работа с текстовым файлом в Visual Studio #21
да, файл в ручную
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

с такими данными и название studenti.txt

вот код:

#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

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 ((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_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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 20:23     Работа с текстовым файлом в Visual Studio #22
Цитата Сообщение от PapaKarlito Посмотреть сообщение
да, файл в ручную
Я не один вопрос задал.

Добавлено через 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_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;
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 20:30  [ТС]     Работа с текстовым файлом в Visual Studio #23
расширения файлов в системе не видны, но studenti точно .txt. скопировал полностью ваш код и так же без изменений
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 20:42     Работа с текстовым файлом в Visual Studio #24
Цитата Сообщение от PapaKarlito Посмотреть сообщение
расширения файлов в системе не видны
Т.е., в папке проекта (там где находится файл с main()), текстовый файл выглядит как studenti? Или выглядит как studenti.txt ? Именно, как выглядит (смотрите и видите...) в папке проекта?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 20:50  [ТС]     Работа с текстовым файлом в Visual Studio #25
сделал сейчас, что бы было видно studenti.txt всеравно nevar atvert failu
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 21:01     Работа с текстовым файлом в Visual Studio #26
Цитата Сообщение от PapaKarlito Посмотреть сообщение
сделал сейчас, что бы было видно studenti.txt всеравно nevar atvert failu
Я вам об одном, вы мне о другом... Скрин покажите с содержимым папки проекта.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 21:10  [ТС]     Работа с текстовым файлом в Visual Studio #27
В какой именно папке? в самой программе или там где проекты хранятся?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 21:17  [ТС]     Работа с текстовым файлом в Visual Studio #28
вот скрин
Работа с текстовым файлом в Visual Studio
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 21:25     Работа с текстовым файлом в Visual Studio #29
Цитата Сообщение от PapaKarlito Посмотреть сообщение
В какой именно папке? в самой программе или там где проекты хранятся?
Не скрин окна студии. Папка проекта - это папка на жёстком диске (не в обозревателе решений), где находится файл с расширением .vcxproj, а также файл с кодом программы (насколько вижу, sourсe.cpp). Там должен находиться файл для чтения.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 21:27  [ТС]     Работа с текстовым файлом в Visual Studio #30
да, там он и есть, с расширением .txt
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 21:29     Работа с текстовым файлом в Visual Studio #31
Скрин покажите.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 21:40  [ТС]     Работа с текстовым файлом в Visual Studio #32
показываю
Миниатюры
Работа с текстовым файлом в Visual Studio  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 21:53     Работа с текстовым файлом в Visual Studio #33
На скрине (28 пост), код не скомпилировался (ошибка при компиляции, fopen() не прошла), тогда какой код вы запускаете?
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 21:56  [ТС]     Работа с текстовым файлом в Visual Studio #34
код скомпилился, просто fopen studio не нравится.но компилится все
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 22:05     Работа с текстовым файлом в Visual Studio #35
Цитата Сообщение от PapaKarlito Посмотреть сообщение
код скомпилился, просто fopen studio не нравится.но компилится все
На скрине почему не скомпилировался? Ctrl + Alt + F7 и покажите результат перекомпиляции (скрин окна студии с выводом результата компиляции, и чтобы fopen() в коде была видна).

Добавлено через 4 минуты
Студии после 10 просто так не компилируют опасные, по их мнению, функции.
PapaKarlito
0 / 0 / 0
Регистрация: 03.10.2013
Сообщений: 24
02.12.2013, 22:06  [ТС]     Работа с текстовым файлом в Visual Studio #36
в прекомпиляции пишет 0 succeed, 1 failed. но через локал виндоус дебагер компилится. если менять fopen на fopen_s то этой функции надо 3 аргумента, и получится примерно то, что у меня было вначале написано.
Миниатюры
Работа с текстовым файлом в Visual Studio  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 13:55     Работа с текстовым файлом в Visual Studio
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.12.2013, 13:55     Работа с текстовым файлом в Visual Studio #37
Код не компилируется с моим кодом (там и fopen() не проходит, и fscanf(), запускается какой-то ранее удачно скомпилированный.
Цитата Сообщение от PapaKarlito Посмотреть сообщение
если менять fopen на fopen_s то этой функции надо 3 аргумента, и получится примерно то, что у меня было вначале написано.
Проверку (если использовать fopen_s()) открытия файла исправили (как в 10 посте написано)? При неудаче не 0.

Добавлено через 15 часов 40 минут
Вот исправленный код, с функциями, которые вы используете. В 10 студии компилируется без предупреждений, а значит в 12-ой или 13-ой (какая у вас не знаю) скомпилируется без ошибок. И мой вам совет: зайдите в студии в Сервис - Параметры - Проекты и решения - Построение и запуск - При выполнении, когда возникают ошибки построения, выберите: Не запускать. Чтобы, если последний код не скомпилировался, не запускался (без спроса) ранее скомпилированный .exe. Или, в крайнем случае, не нужно построение делать через F5. Сначала построить - F7, если успешно, тогда запускать.

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 ((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
                if (feof(list))
                {
                    last = i;
                    break;
                }
                fscanf_s(list, "%s", student[i].name, 30);    // исправленно  //the return will be gibberish, but the pointer will stand on the same way before 
                fscanf_s(list, "%s", student[i].surname, 30); // исправленно  //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);
                
            }
            fclose(list);
            exists = 1;                                    //tiny variable for later use, to avoid processing empty list
 
            break;
Yandex
Объявления
03.12.2013, 13:55     Работа с текстовым файлом в Visual Studio
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru