Нужна помощь!
Текст такой:
#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!” там не разглядеть.
Так как же правильно писать эту программу?
Я новичок в программировании. Пытаюсь написать классическую программу “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!” там не разглядеть.
Так как же правильно писать эту программу?
как вариант: удет ждать, пока не введешь какой-нить символ.
void main()
{
cout << "\nHello, World!\n";
int k;
std::cin>>k;
}
#include <conio.h>
void main()
{
cout << "\nHello, World!\n";
getch();
}
Вообще когда новый проект отрываю (File-->New--> Project --> Win32 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?
Я на это да отвечаю.
Может я не такой проект открываю?
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. Вставляю в него текст программы:
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 !!!!!!!! руб. в Н.Новгороде)
Переформулирую вопрос. Я полностью следовал инструкциям на
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. Вставляю в него текст программы:
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 !!!!!!!! руб. в Н.Новгороде)
вот так попробуй
main()
{
cout << "Hello World!";
return 0;
}
Тогда такую ошибку пишет: error C2065: 'cout' : undeclared identifier
а так
main()
{
std::cout << "Hello World!";
return 0;
}
std::cin>>k;
Я так понял в разных компиляторах одна и та же программа выглядит немного по разному. Только что поставил себе Visual C++ 6.0 , в нём код
void main()
{ cout << "\nHello, World!\n";
}
прекрасно работает.
std::cin>>k;
А есть какой нибудь поумней способ сделать что бы окошко сразу не закрывалось?
А есть какой нибудь поумней способ сделать что бы окошко сразу не закрывалось?
смотри третий пост в этой теме
#include <conio.h>
....
....
getch();
....
оставляет окошко открытым. Спасибо за подсказки.
Где-то в c:\WINNT или недалеко от этого места лежит файл _default.pif. Надо вызвать его properties и на вкладке Program убрать галочку около Close on exit. Тогда все консольные программы по завершении будут оставаться в окне с заголовком Finished или каким-то подобным.
Однако, не советую такое делать без очень серьёзного повода. Вызов getch() — самое естественное решение.
Позволю себе ещё вопрос. Вот программа:
using namespace std;
#include <conio.h>
void main()
{
cout << "\nПривет\n";
getch();
}
Она должна выводить "Привет" на экран, а вместо этого выводит "?ЁштхЄ". Как заставить по русски её писать? У меня WindowsXP, компилятор Microsoft Visual Studio .NET 2003 (если это важно).
Тут все такие отзывчивые...
Это я просто работать сегодня не хочу...
using namespace std;
#include <conio.h>
void main()
{
cout << "\nПривет\n";
getch();
}
Сделайте так.
//...
char szBuf[9];
::CharToOem("\nПривет\n", szBuf);
cout << szBuf;
Удивительное рядом как говорится.
Да, кстати, вот ещё что мне не нравится. Каждый раз когда новую программу пишу, в окошке буквы серым цветом печатаются. Я иду в свойсва окошка и переключаю цвет букв на белый, что бы лучше видно было. Для каждой новой прграммы приходится переключать. А можно как нибудь навсегда переключить?
... буквы серым цветом печатаются...
Я давно уже не задавался этим вопросом, но могу предложить следующие варианты в порядке убывания их перспективности.
- Перейти от консольного приложения к 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]
- Перейти от консольного приложения к GUI.
- Использовать Visual Studio.NET. Там почитать help про Character-Mode Applications.
- Почитать help про STL. Там наверняка что-то есть на эту тему рядом с stdout.
- Загрузить MS-DOS v6 и какое-нибудь старьё типа MS C v5.1 или Zortech C++ v3.
Да, всё это пока для меня сложно.
Моё знакомство с программированием сейчас ограничено
55-ой страницей Подбельского В.В. "Язык С++".
Мне сейчас проще руками цвет переключать. Всё равно спасибо за советы.
Это программа из Подбельского В.В. "Язык С++".
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 не надо преобразовывать?
Мне опять потребовалась помощь.
Это программа из Подбельского В.В. "Язык С++".
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 ничего делать нельзя.
Короче, спросите общество, и Вам посоветуют какую-нибудь другую книгу. Я, к сожалению, подобную литературу давно не читал, поэтому предложить что-нибудь умное не могу.
Во фрагменте «cout << "\npac=" << (void *)pac» преобразование к void* поставлено совершенно не к месту. Без него будет выведено в точности то же самое значение адреса переменной ac.
А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(void *)pac, то выводится pac=0012FED7, а когда просто
рас, то выводится что- то странное pac=f????? ?.(к сожалению это что-то даже отображается правильно)
А книжку выбрасывать не буду пока. Ну ошибся парень(Подбельский В.В.) в одном месте - с кем не бывает. В любых книжках ошибки бывают.
Про разность указателей вроде всё понял.
А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(void *)pac, то выводится pac=0012FED7, а когда просто
рас, то выводится что- то странное pac=f????? ?.
(void *)pac=0012FED7 это в данном случае адрес переменной ac, и это же число записано в переменную pac.
Просто pac, это значение ac= 'f'
Ага, бывают, только не такие. На books.ru есть пару мнений об этой книге.
Напр.: "Замечательно
Единственное - оператор - это не то, о чём он пишет (может он был пьян когда писал)"
Или же: "Лучший учебник по С++
Очень четко и доступно изложенны основы языка. Большое количество примеров облегчает процесс обучения."
Oops. Это было [color=red]10000[/color] сообщение на этой ветке.
Каждый раз когда новую программу пишу, в окошке буквы серым цветом печатаются. Я иду в свойсва окошка и переключаю цвет букв на белый, что бы лучше видно было. Для каждой новой прграммы приходится переключать. А можно как нибудь навсегда переключить?
- Перейти от консольного приложения к 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]
Гениальное как всегда просто. Нужно пойти не в свойства окна, а в умолчания и там переключить цвет букв. Тогда они всегда будут нужного цвета!
А вот здесь вы не правы. Уж не знаю что это значит но когда написано
(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'. Так получается результат, который мы видим.
Почитайте дальше: про указатели, массивы и представление символьных строк и вообще всё, что относится к синтаксису, не вдаваясь особенно в детали, чтобы стал ясен общий смысл конструкций языка. Для этого подойдёт любой учебник. Уже потом внимательно рассмотрите примеры, чтобы понять правила их применения. На этом этапе желательно, чтобы книга была интересной и содержала поменьше ошибок и опечаток.
Почитайте дальше: про указатели, массивы и представление символьных строк и вообще
Этим я сейчас и занимаюсь.
Спасибо за содержательные ответы.