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

Ошибка при компиляции. - C++

Восстановить пароль Регистрация
 
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:13     Ошибка при компиляции. #1
Вот это выдает:
Additional information: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
При компиле вот этой проги
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
[CODE]#define _CRT_SECURE_NO_DEPRECATE
 
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
 
int main() {
 
     setlocale(LC_ALL,"Russian");
    
    // открытие файла на запись
    FILE *f;
    f = fopen( "database.txt", "wt+" );
    if( f == NULL ) {
        printf( "Не удалось создать или перезаписать 'database.txt'. Нажмите клавишу...\n" );
        _getch();
        return -1;
    }
 
    char book[50];      // название книги
    char name[20];      // фамилия
    int year;           // год издания
 
    // работа с файлом
    printf( "Создаётся база данных квитанций.\n\n" );
    while( true )  {
        printf( "Введите название книги (или 0 для выхода): " );
        scanf_s( "%49s", book, 50 );
        fflush(stdin);
 
        printf( "Фамилия автора: " );
        scanf_s( "%19s", name, 20 );
        fflush(stdin);
 
        printf( "Год издания: " );
        scanf_s("%d", year);
        fflush(stdin);
        
        fprintf( f, "%s\t%s\t%d\n", book, name, year );
 
        printf( "Информация добавлена.\n\n" );
    }
 
    // закрытие файла
    fclose(f);
    printf( "\nБаза данных квитанций 'database.txt' готова. Нажмите клавишу...\n" );
    _getch();
}
[/CODE]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:16     Ошибка при компиляции. #2
в какой строчке?
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:17  [ТС]     Ошибка при компиляции. #3
C++
1
fprintf( f, "%s\t%s\t%d\n", book, name, year );
вот тут скорее всего. Но точно я не уверенна. Я программу переписала под свою, может быть где то в другом месте.
Он в файл ничего не записывает, вот даже как лучше сказать.
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:18     Ошибка при компиляции. #4
Цитата Сообщение от Carpe Посмотреть сообщение
scanf_s("%d", year);
scanf_s("%d", &year);
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:22  [ТС]     Ошибка при компиляции. #5
Gravity, спасибо сейчас подправлю и проверю

Добавлено через 1 минуту
А теперь он зациклился. на ноль не выходит, хотя по идее должен.
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:23     Ошибка при компиляции. #6
Цитата Сообщение от Carpe Посмотреть сообщение
А теперь он зациклился. на ноль не выходит, хотя по идее должен.
Не вижу проверки, где на 0 должен был бы быть выход.
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:27  [ТС]     Ошибка при компиляции. #7
Не вставила, прошу прощение.
C++
1
2
3
4
5
6
7
8
while( true )  {
        printf( "Введите название книги (или 0 для выхода): " );
        scanf_s( "%49s", book, 50 );
        fflush(stdin);
        if( book==0 ) break;
        printf( "Фамилия автора: " );
        scanf_s( "%19s", name, 20 );
        fflush(stdin);
Понимаю, что book у меня символьная, но при переписывании на символы выдает что метка не определена
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:27     Ошибка при компиляции. #8
while выполняется пока выражение в скобках равно true
а у тебя while(true)
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:29  [ТС]     Ошибка при компиляции. #9
Mr.Loner, немного не поняла?
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:30     Ошибка при компиляции. #10
Цитата Сообщение от Carpe Посмотреть сообщение
Понимаю, что book у меня символьная, но при переписывании на символы выдает что метка не определена
тогда так
book[0]=='0'
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:30     Ошибка при компиляции. #11
Цитата Сообщение от Carpe Посмотреть сообщение
if( book==0 ) break;
Строки не так сравнивают. Вот пример:
C
1
2
if(strcmp(book, "0") == 0)    /* если book равно "0" */
    break;
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:37  [ТС]     Ошибка при компиляции. #12
Цитата Сообщение от Gravity Посмотреть сообщение
strcmp[/C]
Поясните, пожалуйста, что за оператор.

Добавлено через 1 минуту
Mr.Loner, спасибо все работает
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:37     Ошибка при компиляции. #13
Цитата Сообщение от Carpe Посмотреть сообщение
Поясните, пожалуйста, что за оператор.
Код
НАЗВАНИЕ
       strcmp, strncmp - сравнение двух строк

СИНТАКСИС
       #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);

ОПИСАНИЕ
       Функция  strcmp()  сравнивает две строки s1 и s2.  Она возвращает целое
       число, меньшее, равное,  или  больше  нуля,  если  s1,  соответственно,
       меньше, равна, или больше чем s2.

       Функция strncmp() работает похожим образом, но сравнивает только первые
       n символов строки s1.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       Функции strcmp() и strncmp() возвращают целое число,  меньшее,  равное,
       или больше нуля, если строка s1 (или ее первые n байт), соответственно,
       меньше, равна, или больше s2.
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:52  [ТС]     Ошибка при компиляции. #14
Gravity, спасибо

Добавлено через 13 минут
Тут другая проблема появилась. Если название книги состоит из двух слов, то он записывает только первое из них а второе "летит в трубу". Что с этим делать не подскажите?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2010, 20:08     Ошибка при компиляции.
Еще ссылки по теме:

Ошибка при компиляции C++
Ошибка при компиляции C++
Ошибка при компиляции C++

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

Или воспользуйтесь поиском по форуму:
Mr.Loner
 Аватар для Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 20:08     Ошибка при компиляции. #15
C++
1
2
3
4
#include<iostream>
const int max_size=256;
 
cin.getline(str,max_size,'\n');
Добавлено через 9 минут
И еще. По поводу сравнения строки. Пиши лучше как Gravity сказал.

C++
1
2
if(strcmp(book, "0") == 0)
    break;
Yandex
Объявления
23.01.2010, 20:08     Ошибка при компиляции.
Ответ Создать тему
Опции темы

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