Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 37
1

Файловый ввод-вывод: текст записывается каракулями

15.06.2015, 19:14. Показов 689. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем такая тема.
Есть программа, которая должна брать данные из файла и выводить их на экран, а потом после вывода можно выполнить поиск по данным(например задать какое-то значение, чтобы что-то вывелось).Если задаешь в поиск неверное значение, то программа должна записать в существующий файл ошибку.
Из файла считывает инфу и выводит её на экран, в этом моменте всё норм.А вот в моменте где надо записать в файл информацию, то он мне записывает в файл какой-то бред в виде Название: tlhvpuVmB78.jpg
Просмотров: 43

Размер: 5.1 Кб.
В чём ошибка?
Вот код:
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
#include<stdio.h>
#include<string.h>
#include <locale.h>
#include<errno.h>
 
struct marsh
{
    char namen[20];//начало пункта
    char namec[20];//конец пункта
    int number;//номер маршрута
    char p[20];//пункт для сравнения
    int flagp;
}
mm[3];//размерность массива
int main(void)
    {
        setlocale(LC_ALL, "rus");
        FILE *fpw;
        char cc[256];
        int errno;
        FILE *fp;
        fp=fopen("structures.txt","r");
        struct marsh mm[3];//объявление структуры
        struct marsh x;//переменные структуры
        int n,m;
        int i,j;
        if ((fp=fopen("structures.txt","r"))==NULL)
        {
            printf("%s", strerror(errno));
            exit(0);
        }
 
        for(n=0;n<3;n++)//цикл,3-размерность массива
        {
 
            printf("%d. Vvedite: nazvanie nachalnogo punkta, konechnogo punkta, nomer marshruta>",n+1);//вывод
            fscanf(fp,"%s",&mm[n].namen);//ввод
            fscanf(fp,"%s",&mm[n].namec);//ввод
            fscanf(fp,"%d",&mm[n].number);//ввод
        }
 
        printf("----------------------------------------------\n");//вывод(рисование таблицы)
        printf("| Marshruti |\n");//вывод
        printf("|-----------------|-----------------|---------|\n");//вывод(рисование таблицы)
        printf("|Nazvanie         |Nazvanie         |Nomer    |\n");//вывод
        printf("|nachalnogo punkta|konechnogo punkta|marshruta|\n");//вывод
        printf("|-----------------|-----------------|---------|\n");//вывод
        for(i=0;i<n;i++)
            {
               printf("| %15s | %15s | %7d |\n", mm[i].namen, mm[i].namec, mm[i].number);//ввод данных
            }
        printf("----------------------------------------------\n");//рисование таблицы
        for(i=0;i<n-1;i++)//отсортировка по номеру маршрута
                {
                    m=i;
                    for(j=i+1;j<n;j++)
                    {
                        if(mm[m].number>mm[j].number)//строка больше чем столбец
                        {
                            m=j;
                        }
                    }
                    if(m>i)
                        {
                            x=mm[i];
                            mm[i]=mm[m];
                            mm[m]=x;
                        }
                }
//отсортировка записанного в таблицу
        printf("----------------------------------------------\n");//рисование таблицы
        printf("| Marshruti |\n");//вывод
        printf("|-----------------|-----------------|---------|\n");//рисование таблицы
        printf("|Nazvanie         |Nazvanie         |Nomer    |\n");//вывод
        printf("|nachalnogo punkta|konechnogo punkta|marshruta|\n");//вывод
        printf("|-----------------|-----------------|---------|\n");//рисование таблицы
        for(i=0;i<n;i++)
                    {
                        printf("| %15s | %15s | %7d |\n", mm[i].namen, mm[i].namec, mm[i].number);
                    }
        printf("-----------------------------------------------\n");
        printf("Vvedite naselenniy punkt>");
        char p[20];//сверивается введеные значения с табличными(ввыводится информация о маршруте,если совпадает введеное значение с началом и с концом)
        scanf("%s", &p);//вывод строки
        int flagp=0;
        for(i=0;i<3;i++)
                        {//сравнение начального пункта с конечным
                            if(strncmp(p,mm[i].namen,sizeof(p))==0)
                            {
                                printf("%s\n%s\n%d\n",mm[i].namen,mm[i].namec,mm[i].number);
                                flagp=1;
                            }
                            else if (strncmp(p,mm[i].namec,sizeof(p))==0)
                                {
                                    printf("%s\n%s\n%d\n",mm[i].namen,mm[i].namec,mm[i].number);
                                    flagp=1;
                                }
                        }
        if(flagp==0)//совпадает
                                    {
                                        printf("Net takogo punkta");
                                    }
                                    fpw=fopen("trash.txt","w");
                                    for(n=0;n<3;n++)
                                    {
                                       fwrite(&mm[n].namen ,sizeof(char),fp);//ввод
                                       fwrite(&mm[n].namec ,sizeof(char),fp);//ввод
                                       fwrite(&mm[n].number ,sizeof(int),fp);//ввод
                                    }
return 0;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2015, 19:14
Ответы с готовыми решениями:

Неожиданный консольный вывод в задании на поиск в массиве структур по заданному полю (файловый ввод/вывод)
Подскажите, почему программа не работает? Только вот это сообщение выходит: Process exited after...

Файловый ввод-вывод
Добрый вечер, помогите изменить программу, чтобы вывод данных был не консольным, а файловым вводом...

Файловый ввод-вывод
Объясните, пожалуйста: 1) В чем отличие (fprintf/ fscanf), fgetc/fputc, fwrite/fread, когда, где и...

Файловый ввод/вывод матрицы
Здравствуйте нигде не могу найти пример кода файлового ввода/вывода матрицы на си. Подскажите...

4
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
15.06.2015, 19:57 2
Вы определитесь, как вы пишите/читаете файл.
Или
C
1
fprint/fscanf
или
C
1
fread/fwrite
Добавлено через 8 минут
+ у вас ошибки в этих функциях.
Должно быть
C
1
2
3
fscanf(fp,"%s",mm[n].namen);//ввод
fscanf(fp,"%s",mm[n].namec);//ввод
fscanf(fp,"%d",&mm[n].number);//ввод
и
C
1
2
3
fwrite(&mm[n].namen ,sizeof(char), sizeof(mm[n].namen),fp);//ввод
fwrite(&mm[n].namec ,sizeof(char), sizeof(mm[n].nameс),fp);//ввод
fwrite(&mm[n].number ,sizeof(int),1,fp);//ввод
0
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 37
15.06.2015, 19:59  [ТС] 3
Можно по подробнее?Я не пойму в каком месте ошибка.
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
15.06.2015, 23:38 4
я вам указал ошибку, связанную с вводом-выводом в файл, как минимум в двух местах строки 37-39 и 106-108
0
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 37
16.06.2015, 22:40  [ТС] 5
после замены, на 107 строчке выводит ошибку "'struct marsh' has no member named 'name'"

Добавлено через 27 минут
Тему можно закрывать, я разобрался)
0
16.06.2015, 22:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2015, 22:40
Помогаю со студенческими работами здесь

Как вывести результат работы кода на экран? (файловый ввод/вывод)
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { FILE *q=fopen(&quot;file1.txt&quot;,&quot;r&quot;); //...

Файловый ввод-вывод. Где должен располагаться файл, если в коде путь к нему не прописан?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; # include...

Вывести номер наперстка, под которым окажется шарик после перемещений (файловый ввод/вывод)
Шулер показывает следующий трюк. Он имеет три одинаковых наперстка. Под первый (левый) он кладет...

Считать текст из файла в строку типа std::string (файловый ввод/вывод)
Доброго всем здравия, непонимание работы с файлами побуждает меня беспокоить вас. Программа...


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

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