Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2014, 12:08   #1
Creder
 
Регистрация: 19.12.2013
Сообщений: 7
По умолчанию Что сделано не так?

После ввода данных пишет бесконечное количество меню. Что сделал не так?

Код:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

int main(){
    system("chcp 1251");
    struct sea {
        char name[21];
        char loc[21];
        int depth;
        int area;
    } info;
    int maxdepth, maxarea, mindepth, minarea;
    struct sea d[100];
    int x = 0, i, n, depth, area;

    printf("Введите число морей: \n");
    scanf("%d",&n);
    printf("Введите информацию о морях в таком формате: название, местоположение, наибольшая глубина(в метрах), площадь \n");

    for (i = 0; i < n-1; i++ ){
        scanf("%s %s %d %d ",info.name, info.loc, &depth, &area);
        info.depth = depth;
        info.area = area;
        d[i] = info;
    }

    maxdepth = d[0].depth;
    maxarea = d[0].depth;
    mindepth = d[0].depth;
    minarea = d[0].depth;
do
{

    printf("Вы ввели данные о морях.Ваш запрос:\n");
    printf("1. Самое глубокое море:\n");
    printf("2. Самое крупное море:\n");
    printf("3. Самое глубокое море с минимальной площадью:\n");
    printf("4. Самое мелкое море с минимальной площадью:\n");
    printf("5. Самое глубокое и крупное море:\n");
    printf("6. Самое мелкое море с минимальной площадью:\n");
    printf("7. Выход.\n");
    scanf("%d", &x);


    switch  (x)
    {
    case 1:
        for (i = 0; i < n; i++ ){
        if(d[i].depth > maxdepth){
            maxdepth = d[i].depth;
        }
    }

        for(i = 0 ; i < n-1; i++){
        if(maxdepth == d[i].depth){
            printf("%s %d\n", d[i].name, d[i].depth);
        }
    }
        break;
    case 2:
        for (i = 0; i < n-1; i++ ){
        if(d[i].area > maxarea){
            maxarea = d[i].area;
        }
    }

    for(i = 0 ; i < n-1; i++){
        if(maxarea == d[i].area){
            printf("%s %d\n", d[i].name, d[i].area);
        }
    }
        break;
    case 3:
        for (i = 0; i < n; i++ ){
        if(d[i].depth > maxdepth && d[i].area < minarea){
            maxdepth = d[i].depth;
            minarea = d[i].area;
        }
        else
            printf("Такого моря нет.\n");
            break;
    }

    for(i = 0 ; i < n-1; i++){
        if(maxdepth == d[i].depth && minarea == d[i].area){
            printf("%s %d\n", d[i].name, d[i].depth, d[i].area);
        }
    }
        break;
    case 4:
        for (i = 0; i < n; i++ ){
        if(d[i].depth < mindepth && d[i].area > maxarea){
            mindepth = d[i].depth;
            maxarea = d[i].area;
        }
        else
            printf("Такого моря нет.\n");
            break;
    }

    for(i = 0 ; i < n-1; i++){
        if(mindepth == d[i].depth && maxarea == d[i].area){
            printf("%s %d\n", d[i].name, d[i].depth, d[i].area);
        }
    }
        break;
    case 5:
        for (i = 0; i < n; i++ ){
        if(d[i].depth > maxdepth && d[i].area > maxarea){
            maxdepth = d[i].depth;
            maxarea = d[i].area;
        }
        else
            printf("Такого моря нет.\n");
            break;
    }

    for(i = 0 ; i < n-1; i++){
        if(maxdepth == d[i].depth && maxarea == d[i].area){
            printf("%s %d\n", d[i].name, d[i].depth, d[i].area);
        }
    }
        break;
    case 6:
        for (i = 0; i < n; i++ ){
        if(d[i].depth < mindepth && d[i].area < minarea){
            mindepth = d[i].depth;
            minarea = d[i].area;
        }
        else
            printf("Такого моря нет.\n");
            break;
    }

    for(i = 0 ; i < n-1; i++){
        if(mindepth == d[i].depth && minarea == d[i].area){
            printf("%s %d\n", d[i].name, d[i].depth, d[i].area);
        }
    }
        break;
    case 7:
        printf("До встречи!\n");
        break;
    default:
        printf("Такого раздела нет.\n");

    }
   } while(x != 7);

  return 0;
}
Creder вне форума Ответить с цитированием
Старый 06.05.2014, 22:07   #2
casekey
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 95
По умолчанию

1.
Код:
scanf("%s %s %d %d ",info.name, info.loc, &depth, &area);
убери пробел после последнего %d.

2.
почему везде циклы до n-1? а не до n?

3.
Код:
scanf("%s %s %d %d",info.name, info.loc, &depth, &area);
info.depth = depth;
info.area = area;
почему так, а не так
Код:
scanf("%s %s %d %d",info.name, info.loc, &info.depth, &info.area);
вообщем это я уже не по теме, чтобы работало достаточно поправить п. 1 и 2

Последний раз редактировалось casekey; 06.05.2014 в 22:10.
casekey вне форума Ответить с цитированием
Старый 06.05.2014, 23:04   #3
Creder
 
Регистрация: 19.12.2013
Сообщений: 7
По умолчанию

Спасибо тебе, добрый человек! Не знал, что лишний пробел был виноват.
Creder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что это и как сделано? Как разобраться? gryz Microsoft Office Excel 4 07.02.2012 22:48
Turbo pascal работа с файлами (все сделано, надо разобраться что и где) _4Alex4_ Помощь студентам 4 30.01.2012 00:01
нужно написать текст программы,а так всё сделано. анастасия05 Помощь студентам 0 30.05.2011 15:16