Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Exec11
0 / 0 / 1
Регистрация: 25.12.2012
Сообщений: 32
1

Как избежать использования оператора goto?

06.02.2015, 11:57. Просмотров 361. Ответов 2
Метки нет (Все метки)

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
typedef struct BOOK {
    char *name;
} book;
 
int main()
{
    FILE *fp;
    char *fname = "sometxt";
    book nbook;
    nbook.name = "Some sucker";
    int p;
    
    
m1: if (NULL==(fp=fopen(fname, "r+"))){
        printf("error open file %s\n", fname);
        if (NULL==(fp=fopen(fname, "a"))){
            printf("error creat file %s\n", fname);
            return 1;
        }
        else {
            fclose(fp);
        }
        goto m1;
    }
    else {
        p=fseek(fp, 4, SEEK_SET);
        //printf("p=%d\n", p);
        p=ftell(fp);
        //printf("p=%d\n", p);
 
        fwrite(&nbook, sizeof(struct BOOK), 1,  fp);
        fclose(fp);    
    }
    return 0;
}
логика такая. нужно открыть файл для перезаписи внутри. я решил остановиться на fseek для перемещения в нутри файла.
по этому надо открыть файл, если произошла ошибка создать файл. ключик "a" разрешает писать только в конец файла.
как красиво избавиться от goto ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2015, 11:57
Ответы с готовыми решениями:

Как избежать использование оператора goto
во всех книжках по си пишут, что лучше метки и goto не использовать. типа...

Верно ли утверждение: « действие оператора continue; в приведенных ниже примерах эквивалентно действию оператора goto next; ».
Помогите пожалуйста ответить на вопрос,если можно с примером;Верно ли...

Необходимо избавиться от оператора goto
#include <CONIO.H> #include <STDIO.H> #include <CTYPE.H> #define STARTX ...

Перезапуск программы без оператора GOTO
Пусть имеется данный код: #include <stdio.h> int main(){ a: ; int...

Как избежать зацикливания программы?
Подскажите пожалуйста, как избежать зацикливания программы про вводе буквы вот...

2
ValeryS
Модератор
7444 / 5636 / 716
Регистрация: 14.02.2011
Сообщений: 19,189
Завершенные тесты: 1
06.02.2015, 12:06 2
Цитата Сообщение от Exec11 Посмотреть сообщение
if (NULL==(fp=fopen(fname, "r+"))){
C++
1
while (NULL==(fp=fopen(fname, "r+")))
1
Байт
Эксперт C
20035 / 12657 / 2662
Регистрация: 24.12.2010
Сообщений: 26,352
06.02.2015, 14:42 3
Exec11, Никак не могу понять, чего ты добиваешься в строчках 14-23....
А! Дошло на конец!
Но это же ужасть!
О какой красоте тут может идти речь?
Не говоря уж ничего о том, что дальше ты собираешься стать на позицию 4 пустого файла

Добавлено через 3 минуты
Exec11, пойми, что структурность кода не в отсутствии goto или еще каких формальных признаках, а в ясности изложения мысли как для компьютера, так и для человека.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2015, 14:42

Как избежать ввода недопустимых символов?
Написал тут функцию. При вводе целых чисел все нормально работает. Если...

Нужно убрать "goto", как это сделать?
#include <graphics.h> #include <stdlib.h> #include <time.h> int main() {...

Как правильно выйти из оператора if
Добрый день! Суть задания следующая: при нажатии большой буквы "А" на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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