IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Задача в С++, помогите найти ошибку
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Дана примерная таблица-матрица 1 2 (1,2,3,4-это четверти,для ясности)
3 4
1.Сгенерировать матрицу,вывести на экран сумму элементов 3+2 четвертей,методом выборки столбцов
2.Поиск Элементов
В каждом столбце заданного элемента,деление пополам.

 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main(){
float m[2][2];
int i,j;
srand(time(NULL));
printf("\n");
for(i=0;i<2;i++){
for(j=0;j<2;j++){
m[i][j]=rand()%10;
printf("%1.f ",m[i][j]);
}
printf("\n");
}

printf("summa 2 i 3 = %1.f \n\n",m[0][1]+m[1][0]);
printf("viberi chetvert\n");
printf("1 2\n");
printf("3 4\n");
int c;
scanf("%d",c);
switch© {
case '1':
case '2':{
m[0][0]=m[0][0]/2;
m[0][1]=m[0][1]/2;
}
case '3':
case '4':{
m[1][0]=m[1][0]/2;
m[1][1]=m[1][1]/2;
}
}

for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%f ",m[i][j]);
}
printf("\n");
}

printf("\n");
return(0);
}
ругается в scanf("%d",c); - при выполнении до этого места все нормально, а потом вылетает. почему? подскажите пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
при выполнении до этого места все нормально, а потом вылетает. почему?
Потому что надо
scanf("%d",&c);
, нужен адрес переменной.

P.S. У тебя вообще программа делает не то, что тебе кажется. В switch-е после каждого case-а должен быть break, чтоб прекратить выполнение этой ветки. У тебя break отсутствует, то есть при вводе 1 или второй четверти:
Цитата
  switch© {
case '1':
case '2':{
m[0][0]=m[0][0]/2; // сначала выполнится этот фрагмент
m[0][1]=m[0][1]/2;
}
case '3':
case '4':{
m[1][0]=m[1][0]/2; // а потом этот, ты не сказал программе прекратить выполнение switch
m[1][1]=m[1][1]/2;
}
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Большое спасибо, разобрался. Моя первая программа на Си - готова!
А говорили с языка на язык переходить "без проблем, там все одинаковое!" smile.gif

там кавычки еще убрать надо.
а почему оно идет дальше??? там же стоит "когда с=3 или 4". в паскале это обрабатывается, а здесь - не понятно!

да, спасибо еще и за ссылку на компилятор, которая была в недавней теме.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
а почему оно идет дальше??? там же стоит "когда с=3 или 4". в паскале это обрабатывается
Потому что С и С++ - это не Паскаль.
Цитата(С++ @ Бархатный путь)
Схема выполнения оператора switch

Рассмотрим, наконец, схему выполнения оператора switch:

* вычисляется выражение в круглых скобках после оператора switch (предварительная стадия);
* это значение последовательно сравнивается со значениями константных выражений за метками case (стадия определения начальной точки выполнения оператора);
* если значения совпадают, управление передаётся соответствующему помеченному оператору (стадия выполнения);
* если ни одно значение не совпадает и в теле оператора case есть оператор, помеченный меткой default, управление передаётся этому оператору (но даже в этом случае сочетание объявления с инициализацией недопустимо!) (стадия выполнения);
* если ни одно значение не совпадает, и в теле оператора case нет оператора, помеченного меткой default, управление передаётся оператору, следующему за оператором switch (стадия выполнения).

Метки case и default в теле оператора switch используются лишь при начальной проверке, на стадии определения начальной точки выполнения тела оператора. На стадии выполнения все операторы от точки выполнения и до конца тела оператора выполняются независимо от меток, если только какой-нибудь из операторов не передаст управление за пределы оператора выбора. Таким образом, программист сам должен заботиться о выходе из оператора выбора, если это необходимо. Чаще всего для этой цели используется оператор break.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


да... оказывается я сильно не умею читать!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 7:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name