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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
_Elena_
0 / 0 / 0
Регистрация: 09.07.2011
Сообщений: 11
#1

пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить - C++

09.07.2011, 17:37. Просмотров 1579. Ответов 31
Метки нет (Все метки)

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

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
#include <stdafx.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string.h>
 
#define  file_imya "imena.txt"
#define  file_prazd "prazd.txt"
#define  file_pozdr "pozdr.txt"
#define  file_otvet "otvet.txt"
 
void main(void)
{
system("cls");
FILE *a, *b, *c, *d;
char m[4][30], stroka[3];
char h[30],f[30],g[30];
int i,j,kol,n;
 
if((a=fopen(file_imya,"r"))==NULL) 
    printf("Oshibka pri otkrytii faila %c.\n",file_imya);
 
if((b=fopen(file_prazd,"r"))==NULL) 
    printf("Oshibka pri otkrytii faila %c.\n",file_prazd);
 
if((c=fopen(file_pozdr,"r"))==NULL) 
    printf("Oshibka pri otkrytii faila %c.\n",file_pozdr);
 
if((d=fopen(file_otvet,"w"))==NULL) 
    printf("Oshibka pri otkrytii faila %c.\n",file_otvet);                                        
                                                                                                  
for(i=0; fscanf(a,"%c",&h[i])!= EOF; i++)
    printf("%c",h[i]);
    
printf("Vvedite familiu\n");
scanf("%c",&m[0][j]);
 
 
for(i=0; fscanf(b,"%c",&f[i])!= EOF; i++)
    printf("%c",f[i]);
 
printf("Vvedite prazdnik\n");
scanf("%c",&m[1][j]);
 
 
for(i=0; fscanf(c,"%c",&g[i])!= EOF; i++)
    printf("%c",g[i]);
 
printf("Vvedite pozdravlenie\n");
scanf("%c",&m[2][j]);
 
 
kol=3;
for(i=0;i<kol;i++){
    fprintf(d,"%c","\n");
    for(j=0;j<n;j++)
        fprintf(d,"%c",m[i][j]);}
 
printf("Rasultat zapisan v faile otvet.txt\n");
 
fclose(a);
fclose(b);
fclose(c);
fclose(d);
getch();    
    return 0;
}
помогите, пожалуйста

 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 17:37     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить
Посмотрите здесь:

Не знаю как исправить ошыбку в коде - C++
Ошыбка, наверное, в том что я в классе roslunu описываю ф-ию get_name, где пам'ять под name выделена динамически, а в следующих классах...

Не знаю как исправить ошыбку в коде - C++
Выбивает вот-это error C2679: бинарный &quot;=&quot;: не найден оператор, принимающий правый операнд типа &quot;flower (__cdecl *)(void)&quot; (или приемлемое...

Не знаю как переделать лабу, есть пример - C++
Есть готовая лаба, нужно переделать под другой вариан Помогите, пожалуйста..... Порядок выполнения работы. 1. Выбрать класс АТД в...

Класс string " ошибки, не знаю как исправить - C++
компилятор ругает &quot;{&quot; в конструкторах, что нужно поправить или как заменить эти конструкторы? мой код: TPString.h #ifndef TPSTR_H ...

Как исправить ошибки в коде - C++
Не могу понять что не так. Помогите пожалуйста. #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; using namespace std; ...

подскажите как исправить ошибки в коде C++(oop) - C++
Программа реализует класс &quot;треугольник&quot; и всевозможные методы для него помогите исправить ошибки lb_1_oop_sam.h #ifndef...

Исправить ошибки в коде или пояснить как правильно запустить - C++
Добрый вечер,нужна помощь есть текст программы написанный в 2010 с++ ,немогу запустить в 2013,выдает ошибку что неправильная...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 14:54     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #21
А тогда вот так. У тебя под фамилию отведено 30 байт (зачем тогда устанавливать ограничение 7?), ок, пусть будет 30, (но не больше!)

Сперва посмотри на цикл. В нём ты проверяешь, не был ли введён символ новой строки? И если не был, то ввод продолжается
C++
1
2
for(;&m[0][j- 1]!= 10;j++)
        scanf("%c",&m[0][j]);
Хорошо? Вроде бы. Но как быть с самым первым (нулевым) введённым сиволом? Нам придётся проверить символ m [0] [-1], а его просто нет!
А тогда нулевой символ вводим БЕЗ ПРОВЕРКИ. То есть просто так:
C++
1
scanf("%c",&m[0][j]);
Ок, соединяем два кода в один получаем:
C++
1
2
3
4
printf("_Vvedite familiu но не более чм из 29 символов\n");
scanf("%c",&m[0][j]);
for(j++;&m[0][j- 1]!= 10;j++)
        scanf("%c",&m[0][j]);
Вот смело вводи 29 символов, всё будет нормально. Да не совсем.
Дело в том, что после фамилии ты должна поставить ноль. Последний штрих:

C++
1
2
3
4
5
printf("_Vvedite familiu но не более чм из 29 символов\n");
scanf("%c",&m[0][j++]);
for(;&m[0][j- 1]!= 10;j++)
        scanf("%c",&m[0][j]);
&m[0][j- 1]= 0;
Всё, смело вводи фамилию из 29-символов или меньше, она корректна будет в строке. Это громоздко, но это исправленный ТВОЙ код. Потом могу показать как проще сделать.
_Elena_
0 / 0 / 0
Регистрация: 09.07.2011
Сообщений: 11
10.07.2011, 15:02  [ТС]     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #22
благодарю а насколько проще получится?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 15:08     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #23
Проще, уж будь спокойна.
C++
1
gets (m[0]);
Посмори в справочнике что делает эта функция; длина имени должна быть не более 29 символов. Всё!
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
10.07.2011, 15:40     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #24
Цитата Сообщение от kravam Посмотреть сообщение
Посмори в справочнике что делает эта функция; длина имени должна быть не более 29 символов. Всё!
А поскольку пользователи никогда документацию не читают, то чтобы программа не падала нужно использовать функции, не позволяющие испортить чужую память.
C
1
fgets (m[0], 30, stdin);
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 15:58     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #25
Я в Елену верю.
А вообще просто пусть следит за тем, чтобы фамилия была не больше 29 символов. Если зевнёт, то в моём случае пропишется память, в твоём будет направильная фамилия. Хрен редьки не слаще.
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
10.07.2011, 16:18     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #26
Немного слаще. Если строка урезалась при вводе, то это можно попытаться определить, хотя это и не просто совсем. Если программа упала (в лучшем случае) или начала страшно глючить из-за испорченных данных, то сделать уже ничего нельзя.
Для учебных программ это, может, и не важно, а может и важно, так как лучше изначально приучать себя не допускать переполнения буфера.
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
10.07.2011, 16:23     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #27
Цитата Сообщение от grizlik78 Посмотреть сообщение
А поскольку пользователи никогда документацию не читают
напомню, что
Цитата Сообщение от grizlik78 Посмотреть сообщение
C
1
fgets (m[0], 30, stdin);
занесёт в строку и символ '\n', и этот момент лучше сразу учесть, чтобы потом не удивляться...
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 17:53     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #28
Цитата Сообщение от grizlik78 Посмотреть сообщение
Для учебных программ это, может, и не важно, а может и важно, так как лучше изначально приучать себя не допускать переполнения буфера.
Нехорошо говорить слова. Тот же самый аргумент могу привести и я:
Нужно изначально приучать себя не допускать переполнения буфера, а потому отслеживать длину строки вручную.
Привет.

Добавлено через 6 минут
А коль скоро речь идёт о С, тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
printf("_Vvedite familiu но не более чм из 29 символов\n");
scanf("%c",&m[0][j++]);
for(;&m[0][j- 1]!= 10;j++) {
 scanf("%c",&m[0][j]);
 if (j==29 && m[0][j]!= 10) {
  printf("Перебор, вводи по новой \n");
  j= 0;
  scanf("%c",&m[0][j++]);
 }
}
&m[0][j- 1]= 0;
Добавлено через 48 секунд
Это автоматом всё отслеживается.
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
10.07.2011, 18:04     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #29
Цитата Сообщение от kravam Посмотреть сообщение
Нужно изначально приучать себя не допускать переполнения буфера, а потому отслеживать длину строки вручную.
Привет.
Привет-привет. Речь-то шла про gets, которая принципиально не позволяет предотвратить переполнение буфера. И в любом нормальном источнике если упоминают эту функцию, то тут же рекомендуют не пользоваться ею никогда-никогда.

Цитата Сообщение от kravam Посмотреть сообщение
Нехорошо говорить слова
Ась? По-моему, говорить слова — очень хорошо
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 18:08     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #30
Цитата Сообщение от grizlik78 Посмотреть сообщение
И в любом нормальном источнике если упоминают эту функцию, то тут же рекомендуют не пользоваться ею никогда-никогда.
Естессно, кто ж сомневался бы, что ты нормальными источниками, пользуешься, а я нет?
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
10.07.2011, 18:34     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #31
kravam,
SECURITY CONSIDERATIONS
The gets() function cannot be used securely. Because of its lack of
bounds checking, and the inability for the calling program to reliably
determine the length of the next incoming line, the use of this function
enables malicious users to arbitrarily change a running program's func-
tionality through a buffer overflow attack. It is strongly suggested
that the fgets() function be used in all cases. (See the FSA.)
нормальный источник
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2011, 18:37     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить
Еще ссылки по теме:

в коде ниже есть ошибки. в чем они и как их устранить? - C++
structure brother { char name; into age; sister kin; }a; structure sister { char name; into age;

Найти причины возникновения ошибок в коде и исправить эти ошибки (динамический массив как поле класса) - C++
когда запускаю, пишет что нет прав доступа для записи в память. если писать без класса, то все работает P.S. использую MVS Express 2015...

Есть готовый код C++ (Code Composer Studio). Копирование матрицы. Как исправить ошибки? - C++
т.е. это часть проекта для ЦСП на языке С, но файл исполняемой программы .out не создается из за ошибок в коде :( В С никогда не работал,...

Исправить ошибки в коде - C++
Ребят, а кто-то может помочь переписать эту прогу в С++?? Добавлено через 57 минут Вот, что у меня вышло пока что. Просто я все...

Исправить ошибки в коде - C++
Помогите исправить ошибки(( #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; ...


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,435
10.07.2011, 18:37     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить #32
несерьёзно
Yandex
Объявления
10.07.2011, 18:37     пример на файлы. у меня в коде есть ошибки, но я не знаю, как их исправить
Ответ Создать тему
Опции темы

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