Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Grikontarkingov
Дата сообщения: 05.09.2014 22:47
Здравствуйте. Я недавно начал учиться программированию на С. Сначала, когда завершалась программа в консоли появлялось "нажмите на любую клавишу для завершения", а сейчас пропало....Что я стал пропускать...не успеваю посмотреть что там)))
Автор: ne_viens
Дата сообщения: 05.09.2014 23:19
main()
{
//...
    puts("Press Enter to exit");
    getchar();
}

Anykey чуть посложнее будет.
Автор: Grikontarkingov
Дата сообщения: 05.09.2014 23:51
не не не....фишка в том, что я отдельно не вписывал это. А было...а сейчас пропало....Причем даже первые задачки переписываю, все равно так....
Автор: ne_viens
Дата сообщения: 06.09.2014 00:37
В winXP такая галочка была "Close window on exit", если через shortcut запускать.
Автор: Grikontarkingov
Дата сообщения: 06.09.2014 00:45
Я сижу на 7, и это было может месяц или два назад..версия та же Visual 2008 express edition

Добавлено:
И запускаю я через visual, а открывает он в консольке
Автор: unreal666
Дата сообщения: 06.09.2014 01:05
Grikontarkingov
в таком случае надо спрашивать не в данной теме, а в теме по VS, т.к. данное поведение собственно к языкам C/C++ отношения не имеет.
Автор: Grikontarkingov
Дата сообщения: 06.09.2014 01:20
Спасибо за совет)))
Автор: ne_viens
Дата сообщения: 06.09.2014 01:50
Перед запуском мышой breakpoint поставь в серой вертикальной полосе слева от кода. Напротив return'a из main или в другом подходящем месте.
Автор: akaGM
Дата сообщения: 06.09.2014 11:33
да ладно вам, накинулись на новичка...
посоветовали бы лучше по-простому getch() в проге поставить, и Студия покорно подождёт...
Автор: nick7inc
Дата сообщения: 06.09.2014 15:42
Напомните, пожалуйста, как в C (не в С++) передавать функции в качестве параметра ссылку на структуру . Код даёт ошибку:

Код:
#include <stdlib.h>

struct AAA
{
int b;
char c;
};

int main()
{
printf("Hello world!\n");
return 0;
}

void func(struct AAA& a)
{
a.b = 0;
return ;
}
Автор: akaGM
Дата сообщения: 06.09.2014 15:57
void func(struct AAA * a)
{
a->b = 10;
return ;
}

вызов: func(&a);
Автор: nick7inc
Дата сообщения: 06.09.2014 16:04
akaGM
Спасибо, передача указателем мне известна. Похоже, что в чистом С нет ссылок вообще, я правильно понял?
Автор: akaGM
Дата сообщения: 06.09.2014 16:29
да ради бога...

void func(struct AAA a)
{
printf("%d\n", a.b);
return ;
}

вызов: func(a);

Добавлено:

а полезет в стек ссылка или всё содержимое зависит от оптимизации...
Автор: nick7inc
Дата сообщения: 06.09.2014 20:47

Цитата:
а полезет в стек ссылка или всё содержимое зависит от оптимизации...

Понял, благодарю.
Автор: dragon010
Дата сообщения: 07.09.2014 00:05

Цитата:
да ради бога...
 
void func(struct AAA a)
{
    printf("%d\n", a.b);
    return ;
}
 
вызов: func(a);  
 
Добавлено:
 
а полезет в стек ссылка или всё содержимое зависит от оптимизации...



ЭЭээ. Это просто шикарный пример, особенно если у него там было изменение поля структуры..
О том, что там что-то может до такой степени заоптимизироваться думать вообще не надо.

Если передаешь по значению - получаешь копирование.


Цитата:
Похоже, что в чистом С нет ссылок вообще, я правильно понял?

Понятно же, что функционал ссылок заменяется без особой боли указателями.
Имхо, передача объектов для их изменения через указатели делает эти изменения более явными, в отличии от использования ссылок.

Надеюсь, вы поймете, что я хотел сказать)
Автор: akaGM
Дата сообщения: 07.09.2014 00:40

Цитата:
особенно если у него там было изменение поля структуры..
а у него там было?
значит, не судьба изменить...


Цитата:
Понятно же, что функционал ссылок заменяется без особой боли указателями
я бы даже сказал, что наоборот, это ещё кто кого заменяет...
это ссылки -- для нелюбителей многа букаф и "какбэ" алиас указателей, не знаю, зачем от С что-то ещё просить...
я тут одному "типа программисту" объяснял почему он не может написать

а = 10;
a = b / c;
a = "всякую тут хрень";
Автор: unreal666
Дата сообщения: 07.09.2014 08:01
как объявить (typedef) тип, к примеру, __int16 (как в VS C++), если в какой-либо ОС sizeof(char)=1, а sizeof(short)=sizeof(int)=sizeof(long)=sizeof(long long)=sizeof(void*)=8 (такое в модели данных SILP64)?
Автор: ne_viens
Дата сообщения: 07.09.2014 12:26
Если компилятор не поддерживает неявные преобразования из 2 байтовых переменных в 8 байтовые, то никак.
Автор: unreal666
Дата сообщения: 07.09.2014 12:58
Никаких преобразований точно не нужно. Нужен тип, который будет именно 2-х или 4-х байтовым вне зависимости от модели данных. Но если такое никак, то фигово.
Автор: akaGM
Дата сообщения: 07.09.2014 13:17
так через платформо-зависимые #ifdef-ы попробуй...
Автор: unreal666
Дата сообщения: 07.09.2014 13:28
а какой смысл, если "присваивать" данный тип нечему будет.
т.е.

Код: #ifdef КАКАЯ_ТО_ПЛАТФОРМА_С_МОДЕЛЬЮ_ДАННЫХ_SILP64
typedef что_здесь_будет __int16
#endif
Автор: akaGM
Дата сообщения: 07.09.2014 13:32
ну по твоему вопросу сложно понять логику твоей нужды...


Цитата:
или вообще такое послать нафиг
я ж говорю: сложно понять :)

кстати, не поверю, что тучей ifdef-ов нельзя учесть все возможные размеры типов для всех платформ/моделей данных на уровне одного общего инклудника...
Автор: Abs62
Дата сообщения: 07.09.2014 14:03
unreal666

Цитата:
Никаких преобразований точно не нужно. Нужен тип, который будет именно 2-х или 4-х байтовым вне зависимости от модели данных.

А зачем, собственно?
Автор: unreal666
Дата сообщения: 07.09.2014 14:07

Цитата:
А зачем, собственно?

чтобы работать со всякими форматами данных (файлы определенных типов, стандартные протоколы и т.п.) одинаково, вне зависимости от "прибабахнутости" компиляторов на разных ОС.
Автор: ne_viens
Дата сообщения: 07.09.2014 14:29
inttypes.h + int16_t ?
Автор: unreal666
Дата сообщения: 07.09.2014 14:40
ne_viens
по спекам C++:

Код: typedef signed integer type int8_t; // optional
typedef signed integer type int16_t; // optional
typedef signed integer type int32_t; // optional
typedef signed integer type int64_t; // optional
Автор: Abs62
Дата сообщения: 07.09.2014 14:54
unreal666

Цитата:
чтобы работать со всякими форматами данных (файлы определенных типов, стандартные протоколы и т.п.) одинаково, вне зависимости от "прибабахнутости" компиляторов на разных ОС.

Тогда, пожалуй, разве что прокручивать всё через байтовые массивы. При условии, конечно, что хоть байты там восьмибитовые.
Автор: unreal666
Дата сообщения: 07.09.2014 15:23

Цитата:
При условии, конечно, что хоть байты там восьмибитовые.

ну судя по основным моделям данных, char везде = 1 байту. Так что похоже да - универсальные только массивы char'ов.
Автор: Grikontarkingov
Дата сообщения: 09.09.2014 22:03
И снова я))) Вопрос такой, есть задачка на Си:
Напишите программу для решения уравнения ax = b относительно х в целых числах. Учтите, что a может принимать любые значения, в том числе и 0.
На вход программе подаются целые числа a, b, по модулю не превосходящие 30000. Требуется вывести целый корень уравнения, если он существует и единственный. Если уравнение не имеет корней, то вывести no solution. Если уравнение имеет больше одного целого корня, то вывести many solutions.
Вот ее решение:
#include <stdio.h>

int main(void){

int a,b;

scanf("%d %d",&a,&b);

if((a==0)&&(b!=0)) printf("no solution\n");

else {

if((a==0)&&(b==0)) printf("many solution\n");

else {

if (b%a!=0) printf("no solution\n");

else {

printf("%d\n",b/a);

}

}

}

return(0);

}

Вопрос у меня такой, в строчке где "if (b%a!=0) printf("no solution\n");" я категорически не понимаю что значит процент перед "а"...помогите плиз))
Автор: akaGM
Дата сообщения: 09.09.2014 22:19
целочисленное "деление по модулю"

10 % 3 = 1

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.