Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужна помощь!

8.3K
12 марта 2005 года
артём~
23 / / 12.03.2005
Я новичок в программировании. Пытаюсь написать классическую программу “Hello, World!”
Текст такой:

#include <iostream.h>
void main()
{ cout << "\nHello, World!\n";
}

Мой компилятор-Microsoft Visual C++ .NET.

Я делал так:
1. Запускаю компилятор, открываю New Project – Win32 Console Application,называю его first.сср,
2. Открываю New File- C++ File (.cpp), вставляю в него текст программы.
3. Нажимаю Start F5, в папке first появляется first.exe.
4. Когда запускаю его, на мгновение, появляется какое то окошко, надписи “Hello, World!” там не разглядеть.
Так как же правильно писать эту программу?
1.9K
12 марта 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by артём~
Я новичок в программировании. Пытаюсь написать классическую программу “Hello, World!”
Текст такой:

#include <iostream.h>
void main()
{ cout << "\nHello, World!\n";
}

Мой компилятор-Microsoft Visual C++ .NET.

Я делал так:
1. Запускаю компилятор, открываю New Project – Win32 Console Application,называю его first.сср,
2. Открываю New File- C++ File (.cpp), вставляю в него текст программы.
3. Нажимаю Start F5, в папке first появляется first.exe.
4. Когда запускаю его, на мгновение, появляется какое то окошко, надписи “Hello, World!” там не разглядеть.
Так как же правильно писать эту программу?


как вариант: удет ждать, пока не введешь какой-нить символ.

 
Код:
#include <iostream.h>
void main()
{
   cout << "\nHello, World!\n";
   int k;
   std::cin>>k;
}
301
12 марта 2005 года
lord Kelvin
897 / / 08.11.2004
 
Код:
#include <iostream.h>
#include <conio.h>
void main()
{
 cout << "\nHello, World!\n";
 getch();
}
8.3K
12 марта 2005 года
артём~
23 / / 12.03.2005
Я проверил оба варианта. В обоих случаях одинаковая фигня: появляется окошко на мгновение и пропадает, ввести ничего не просит.

Вообще когда новый проект отрываю (File-->New--> Project --> Win32 Console Application) такой текст появляется:
 
Код:
// first.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

А ещё когда на F5 жму такое сообщение появляется:
These project configuration(s) are out of date:
1-Debug Win32
Would you like to build them?

Я на это да отвечаю.
Может я не такой проект открываю?
8.3K
12 марта 2005 года
артём~
23 / / 12.03.2005
Переформулирую вопрос. Я полностью следовал инструкциям на
http://www.towson.edu/users/davani/cosc236/handouts/vc++start/vcstart.html .
А именно File --> New --> Project --> Win32 Console Project --> Empty Project-->Жму Finish.
В окошке Solution Explorer из контекстного меню выбираю Add --> Add New Item...--> C++ File(cpp.). Называю его типа Hello.cpp. Вставляю в него текст программы:
 
Код:
#include <iostream.h>

main()
{
    cout << "Hello World!";
    return 0;
}

Запускаю компилятор F7.
Выдаётся ошибка: fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

Короче нет такого файла iostream.h. Ну, раз компилятор не может его найти, тогда самому поискать. Стандартной Windows искалкой весь винчестер прошел – нет такого файла.

Собственно вопрос: это у меня с головой проблемы или у компилятора (Microsoft Visual Studio .NET 2003 – 8 дисков – 800 !!!!!!!! руб. в Н.Новгороде)
1.9K
12 марта 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by артём~
Переформулирую вопрос. Я полностью следовал инструкциям на
http://www.towson.edu/users/davani/cosc236/handouts/vc++start/vcstart.html .
А именно File --> New --> Project --> Win32 Console Project --> Empty Project-->Жму Finish.
В окошке Solution Explorer из контекстного меню выбираю Add --> Add New Item...--> C++ File(cpp.). Называю его типа Hello.cpp. Вставляю в него текст программы:
 
Код:
#include <iostream.h>

main()
{
    cout << "Hello World!";
    return 0;
}

Запускаю компилятор F7.
Выдаётся ошибка: fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

Короче нет такого файла iostream.h. Ну, раз компилятор не может его найти, тогда самому поискать. Стандартной Windows искалкой весь винчестер прошел – нет такого файла.

Собственно вопрос: это у меня с головой проблемы или у компилятора (Microsoft Visual Studio .NET 2003 – 8 дисков – 800 !!!!!!!! руб. в Н.Новгороде)


вот так попробуй

 
Код:
#include <iostream>

main()
{
    cout << "Hello World!";
    return 0;
}
8.3K
12 марта 2005 года
артём~
23 / / 12.03.2005
Тогда такую ошибку пишет: error C2065: 'cout' : undeclared identifier
1.9K
13 марта 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by артём~
Тогда такую ошибку пишет: error C2065: 'cout' : undeclared identifier


а так

 
Код:
#include <iostream>

main()
{
    std::cout << "Hello World!";
    return 0;
}
8.3K
13 марта 2005 года
артём~
23 / / 12.03.2005
Да, теперь работает, но только окошко сразу изчезает. Что бы не исчезало я добавил строчки
 
Код:
int k;
std::cin>>k;

Я так понял в разных компиляторах одна и та же программа выглядит немного по разному. Только что поставил себе Visual C++ 6.0 , в нём код
 
Код:
#include <iostream.h>
void main()
{ cout << "\nHello, World!\n";
}

прекрасно работает.
8.3K
13 марта 2005 года
артём~
23 / / 12.03.2005
Цитата:
Что бы не исчезало я добавил строчки
 
Код:
int k;
std::cin>>k;


А есть какой нибудь поумней способ сделать что бы окошко сразу не закрывалось?

1.9K
13 марта 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by артём~

А есть какой нибудь поумней способ сделать что бы окошко сразу не закрывалось?


смотри третий пост в этой теме

8.3K
13 марта 2005 года
артём~
23 / / 12.03.2005
И правда, такая комбинация:
Цитата:
.....
#include <conio.h>
....
....
getch();
....


оставляет окошко открытым. Спасибо за подсказки.

425
14 марта 2005 года
sq_deep
498 / / 18.02.2005
Чтобы консольное окно не закрывалось, можно сделать ещё и так.

Где-то в c:\WINNT или недалеко от этого места лежит файл _default.pif. Надо вызвать его properties и на вкладке Program убрать галочку около Close on exit. Тогда все консольные программы по завершении будут оставаться в окне с заголовком Finished или каким-то подобным.

Однако, не советую такое делать без очень серьёзного повода. Вызов getch() — самое естественное решение.
8.3K
14 марта 2005 года
артём~
23 / / 12.03.2005
Тут все такие отзывчивые, не то что некоторые...
Позволю себе ещё вопрос. Вот программа:
 
Код:
#include <iostream>
using namespace std;
#include <conio.h>
void main()
{
    cout << "\nПривет\n";
    getch();
}

Она должна выводить "Привет" на экран, а вместо этого выводит "?ЁштхЄ". Как заставить по русски её писать? У меня WindowsXP, компилятор Microsoft Visual Studio .NET 2003 (если это важно).
425
14 марта 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by артём~
Тут все такие отзывчивые...


Это я просто работать сегодня не хочу...

Цитата:
...программа
 
Код:
#include <iostream>
using namespace std;
#include <conio.h>
void main()
{
    cout << "\nПривет\n";
    getch();
}
...должна выводить "Привет" на экран, а вместо этого выводит "?ЁштхЄ"...

Сделайте так.

 
Код:
#include <windows.h>
//...
    char szBuf[9];
    ::CharToOem("\nПривет\n", szBuf);
    cout << szBuf;
или если у вас старая версия Platform SDK, то напишите AnsiToOem вместо CharToOem.
8.3K
14 марта 2005 года
артём~
23 / / 12.03.2005
Ура-а-а-а!!! Работает!
Удивительное рядом как говорится.
Да, кстати, вот ещё что мне не нравится. Каждый раз когда новую программу пишу, в окошке буквы серым цветом печатаются. Я иду в свойсва окошка и переключаю цвет букв на белый, что бы лучше видно было. Для каждой новой прграммы приходится переключать. А можно как нибудь навсегда переключить?
425
15 марта 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by артём~
... буквы серым цветом печатаются...

Я давно уже не задавался этим вопросом, но могу предложить следующие варианты в порядке убывания их перспективности.

  • Перейти от консольного приложения к GUI. [COLOR=silver]Это надо всё равно сделать, потому что по нынешним стандартам средства консольного окна совершенно недостаточны, кроме как в отдельных редких случаях.[/COLOR]
  • Использовать Visual Studio.NET. Там почитать help про Character-Mode Applications. [COLOR=silver]Там есть функции типа GetStdHandle(), FillConsoleOutputAttribute(), FillConsoleOutputCharacter() и прочие, которые сделаны специально для консольного вывода. Сам я их никогда не использовал.[/COLOR]
  • Почитать help про STL. Там наверняка что-то есть на эту тему рядом с stdout. [COLOR=silver]Я не читал.[/COLOR]
  • Загрузить MS-DOS v6 и какое-нибудь старьё типа MS C v5.1 или Zortech C++ v3. [COLOR=silver]Точно помню, что лет 15 назад я с ними работал, причём буковки были цветные. Скорее всего, я писал в видеобуфер, но сейчас про это уже и вспоминать нет смысла.[/COLOR]
8.3K
15 марта 2005 года
артём~
23 / / 12.03.2005
Цитата:
Originally posted by sq_deep
  • Перейти от консольного приложения к GUI.
  • Использовать Visual Studio.NET. Там почитать help про Character-Mode Applications.
  • Почитать help про STL. Там наверняка что-то есть на эту тему рядом с stdout.
  • Загрузить MS-DOS v6 и какое-нибудь старьё типа MS C v5.1 или Zortech C++ v3.


Да, всё это пока для меня сложно.
Моё знакомство с программированием сейчас ограничено
55-ой страницей Подбельского В.В. "Язык С++".
Мне сейчас проще руками цвет переключать. Всё равно спасибо за советы.

8.3K
16 марта 2005 года
артём~
23 / / 12.03.2005
Мне опять потребовалась помощь.
Это программа из Подбельского В.В. "Язык С++".
Код:
#include <iostream>
using namespace std;
#include <conio.h>
void main()
{
    char ac='f', bc='2';
    char *pac=&ac, *pbc=&bc;
    long int a1=3, b1=4;
    long int *pa1=&a1, *pb1=&b1;
    cout << "\npac=" << (void *)pac << "\tpbc=" << (void *)pbc << "\t(pac-pbc)=" << pac-pbc ;
    cout << "\npal=" << pa1 << "\tpb1=" << pb1 << "\t(pb1-pa1)=" << pb1-pa1 ;
    cout << "\n(int)pac-(int)pbc=" << (int)pac-(int)pbc ;
    cout << "\n(int)pb1-(int)pa1=" << (int)pb1-(int)pa1 ;
    getch();
}

В книжке написано, я цитирую: ... разность указателей, адресующих два смежных объекта любого типа, всегда равна 1.Конец цитаты.
Таким образом (pac-pbc) и (pb1-pa1) должны быть =1.Собственно в книжке такой результат и приводится. А у меня почему-то получаетя (pac-pbc)=12
(pb1-pa1)=-3
Почеиу так?
И вообще что означает запись (void *)pac ? Я так понимаю это преобразование типа. Только к какому типу преобразуетя. И почему тогда ра1 не надо преобразовывать?
425
16 марта 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by артём~
Мне опять потребовалась помощь.
Это программа из Подбельского В.В. "Язык С++".
Код:
#include <iostream>
using namespace std;
#include <conio.h>
void main()
{
    char ac='f', bc='2';
    char *pac=&ac, *pbc=&bc;
    long int a1=3, b1=4;
    long int *pa1=&a1, *pb1=&b1;
    cout << "\npac=" << (void *)pac << "\tpbc=" << (void *)pbc << "\t(pac-pbc)=" << pac-pbc ;
    cout << "\npal=" << pa1 << "\tpb1=" << pb1 << "\t(pb1-pa1)=" << pb1-pa1 ;
    cout << "\n(int)pac-(int)pbc=" << (int)pac-(int)pbc ;
    cout << "\n(int)pb1-(int)pa1=" << (int)pb1-(int)pa1 ;
    getch();
}

В книжке написано, я цитирую: ... разность указателей, адресующих два смежных объекта любого типа, всегда равна 1.Конец цитаты.
Таким образом (pac-pbc) и (pb1-pa1) должны быть =1.Собственно в книжке такой результат и приводится. А у меня почему-то получаетя (pac-pbc)=12
(pb1-pa1)=-3
Почеиу так?
И вообще что означает запись (void *)pac ? Я так понимаю это преобразование типа. Только к какому типу преобразуетя. И почему тогда ра1 не надо преобразовывать?

артём~, немедленно выбросьте эту книжку. ac и bc не являются смежными объектами. Вообще никакой стандарт языка C не диктует компилятору порядок размещения объектов в памяти, поэтому делать предположения о нём нельзя. Смежными будут объекты x[0] и x[1], если x описан как
type x[2];
Тогда, конечно, &x[1]-&x[0] == 1 независимо от конкретного типа type, а то, что написано в книжке, я не понимаю.

Во фрагменте «cout << "\npac=" << (void *)pac» преобразование к void* поставлено совершенно не к месту. Без него будет выведено в точности то же самое значение адреса переменной ac.

Вообще, преобразование к void* нужно тогда, когда вы используете объект, тип которого заранее не известен. Потом, когда тип определится, void* должен быть преобразован к действительному типу, потому что с объектами типа void ничего делать нельзя.

Короче, спросите общество, и Вам посоветуют какую-нибудь другую книгу. Я, к сожалению, подобную литературу давно не читал, поэтому предложить что-нибудь умное не могу.

8.3K
16 марта 2005 года
артём~
23 / / 12.03.2005
Про разность указателей вроде всё понял.
Цитата:
Originally posted by sq_deep
Во фрагменте «cout << "\npac=" << (void *)pac» преобразование к void* поставлено совершенно не к месту. Без него будет выведено в точности то же самое значение адреса переменной ac.


А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(void *)pac, то выводится pac=0012FED7, а когда просто
рас, то выводится что- то странное pac=f????? ?.(к сожалению это что-то даже отображается правильно)
А книжку выбрасывать не буду пока. Ну ошибся парень(Подбельский В.В.) в одном месте - с кем не бывает. В любых книжках ошибки бывают.

368
16 марта 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by артём~
Про разность указателей вроде всё понял.
А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(void *)pac, то выводится pac=0012FED7, а когда просто
рас, то выводится что- то странное pac=f????? ?.

(void *)pac=0012FED7 это в данном случае адрес переменной ac, и это же число записано в переменную pac.

Просто pac, это значение ac= 'f'

Цитата:
А книжку выбрасывать не буду пока. Ну ошибся парень(Подбельский В.В.) в одном месте - с кем не бывает. В любых книжках ошибки бывают.

Ага, бывают, только не такие. На books.ru есть пару мнений об этой книге.
Напр.: "Замечательно
Единственное - оператор - это не то, о чём он пишет (может он был пьян когда писал)"

Или же: "Лучший учебник по С++
Очень четко и доступно изложенны основы языка. Большое количество примеров облегчает процесс обучения."

Oops. Это было [color=red]10000[/color] сообщение на этой ветке.

8.3K
17 марта 2005 года
артём~
23 / / 12.03.2005
Цитата:
Originally posted by артём~
Каждый раз когда новую программу пишу, в окошке буквы серым цветом печатаются. Я иду в свойсва окошка и переключаю цвет букв на белый, что бы лучше видно было. Для каждой новой прграммы приходится переключать. А можно как нибудь навсегда переключить?


Цитата:
Originally posted by sq_deep
  • Перейти от консольного приложения к GUI. [COLOR=silver]Это надо всё равно сделать, потому что по нынешним стандартам средства консольного окна совершенно недостаточны, кроме как в отдельных редких случаях.[/COLOR]
  • Использовать Visual Studio.NET. Там почитать help про Character-Mode Applications. [COLOR=silver]Там есть функции типа GetStdHandle(), FillConsoleOutputAttribute(), FillConsoleOutputCharacter() и прочие, которые сделаны специально для консольного вывода. Сам я их никогда не использовал.[/COLOR]
  • Почитать help про STL. Там наверняка что-то есть на эту тему рядом с stdout. [COLOR=silver]Я не читал.[/COLOR]
  • Загрузить MS-DOS v6 и какое-нибудь старьё типа MS C v5.1 или Zortech C++ v3. [COLOR=silver]Точно помню, что лет 15 назад я с ними работал, причём буковки были цветные. Скорее всего, я писал в видеобуфер, но сейчас про это уже и вспоминать нет смысла.[/COLOR]


Гениальное как всегда просто. Нужно пойти не в свойства окна, а в умолчания и там переключить цвет букв. Тогда они всегда будут нужного цвета!

425
17 марта 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by артём~
А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(void *)pac, то выводится pac=0012FED7, а когда просто
рас, то выводится что- то странное pac=f????? 

Согласен, артём~, моя ошибка. Читая этот текст, я перепутал тип ac. Думал, это int. И немудрено перепутать в таком примере. Этот текст надо приводить под заголовком «Экономьте байты, сколько бы это вам ни стоило».

Так вот, cout << pa1 и cout << (void*) pa1 дадут одинаковый результат на печати, а с char* дела обстоят иначе.

Если вы пишете cout << (void*) pac, то pac теряет тип, и единственное, что cout может с этим сделать, — только напечатать содержащийся в pac адрес. Поэтому видим 0012FED7.

Когда же мы пишем cout << pac, cout печатает null-terminated string (строку, завершающуюся нуль-символом '\0'), начиная с адреса 0x0012FED7. Первым символом этой строки является 'f', а дальше идут байты, не имеющие отношения к переменной ac. cout продолжает выводить эти символы, пока не встретит '\0'. Так получается результат, который мы видим.

Почитайте дальше: про указатели, массивы и представление символьных строк и вообще всё, что относится к синтаксису, не вдаваясь особенно в детали, чтобы стал ясен общий смысл конструкций языка. Для этого подойдёт любой учебник. Уже потом внимательно рассмотрите примеры, чтобы понять правила их применения. На этом этапе желательно, чтобы книга была интересной и содержала поменьше ошибок и опечаток.

8.3K
17 марта 2005 года
артём~
23 / / 12.03.2005
Цитата:
Originally posted by sq_deep
Почитайте дальше: про указатели, массивы и представление символьных строк и вообще



Этим я сейчас и занимаюсь.
Спасибо за содержательные ответы.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог