Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: вопросы полного чайника

Пт авг 29, 2014 11:27:00

Завели одну переменную под символ и восемь строк по 50 символов. Того же можно было добиться, написав

Код:
char ch;
char strN[8][50];

Re: вопросы полного чайника

Чт сен 04, 2014 07:51:29

YS писал(а):Завели одну переменную под символ и восемь строк по 50 символов. Того же можно было добиться, написав

Код:
char ch;
char strN[8][50];


чет ругается на такую форму записи :(
расписал по строкам и ругань прошла, в чем может быть дело ?

Код:
char str0[50];
char str1[50];
char str2[50];
char str3[50];
char str4[50];
char str5[50];
char str6[50];
char str7[50];
char str8[50];

Re: вопросы полного чайника

Чт сен 04, 2014 08:00:38

Sam85 писал(а):чет ругается на такую форму записи

Надо же писать как ругается. Да и вообще, в сообщении об ошибке обычно есть вся нужная информация для устранения ошибки, если нет - то вбиваешь в поисковик и читаешь, что пишут. Могу сказать, что умение внимательно читать - решает 99% проблем.

Re: вопросы полного чайника

Чт сен 04, 2014 08:10:16

menzoda писал(а):
Sam85 писал(а):чет ругается на такую форму записи

Надо же писать как ругается.

Error in lines from 1 to 123: programmer does not understand anything, must be replaced.
шютка :)))

Re: вопросы полного чайника

Чт сен 04, 2014 08:35:20

Ага. Как там говорят? Обычно, проблема заключается в интерфейсе между креслом и клавиатурой.

Re: вопросы полного чайника

Чт сен 04, 2014 09:00:12

menzoda писал(а):
Sam85 писал(а):чет ругается на такую форму записи

Надо же писать как ругается. Да и вообще, в сообщении об ошибке обычно есть вся нужная информация для устранения ошибки, если нет - то вбиваешь в поисковик и читаешь, что пишут. Могу сказать, что умение внимательно читать - решает 99% проблем.

[C++ Error] Unit1.cpp(11): E2451 Undefined symbol 'str1' вот так и ругаеться
вот код

не объявлена или неправильно объявлена переменная str, как надо ?
Код:
if(ch>='A'&&ch<='Z')

эта строка читаеться примерно так "если переменная ch находиться в между A и Z" ?

Re: вопросы полного чайника

Чт сен 04, 2014 09:08:32

Все верно. Сначала ты объявил массив с именем strN, а потом пытаешся использовать какие-то str1. Нужно так:
Код:
char str[8][50];

CharToOem("Hello", str[0]);
CharToOem("World", str[1]);
...
CharToOem("Goodbye", str[7]);


В сообщении об ошибке это прямым текстом говорится: неизвестный символ str1. Неизвестный потому что ты нигде не объявил переменную с таким именем. А доступ к элементам массива осуществляется через специальный оператор (квадратные скобки), а не просто добавлением циферок к имени массива. Нумерация начинается с нуля.

Re: вопросы полного чайника

Чт сен 04, 2014 09:51:34

благодарю за объяснения :) а что по поводу нижеследующего куска кода ?
Код:
if(ch>='A'&&ch<='Z')

эта строка читаеться примерно так "если переменная ch находиться в между A и Z" ?

Re: вопросы полного чайника

Чт сен 04, 2014 09:53:34

Да, все так. Другими словами проверяется является ли ch заглавной латинской буквой.

Re: вопросы полного чайника

Чт сен 04, 2014 10:27:16

menzoda писал(а):Да, все так. Другими словами проверяется является ли ch заглавной латинской буквой.

А как обозначаются что именно заглавными ? и как выглядел бы код если бы не имело значения каким регистром вводить ?

Re: вопросы полного чайника

Чт сен 04, 2014 10:46:10

В данном случае эксплуатируется тот факт, что в используемой кодировке (стандарту по которому символ сопоставляется числовому коду) заглавные буквы расположены по алфавиту друг за другом. То есть, напирмер, символу 'A' соответствует код 65, символу 'B' - код 66, 'C' - код 67, и так далее до символа 'Z' с кодом 90. После заглавных букв идут строчные, так же в алфавитном порядке. Цифры тоже расположены по порядку, только в другом месте, перед заглавными буквами. Вот, можешь посмотреть табличку ASCII, почитай что это такое в википедии, почитай про различные кодировки, и что это такое - кодировка.

Ближе к делу. Имеем подряд идущие заглавные буквы, соответственно, если числовое значение переменной больше кода буквы 'A' и меньше кода буквы 'Z', то это значение является кодом какой-либо заглавной буквы. Компилятор подменяет выражения 'A' и 'Z' (которые являются символьными литералами) на соответствующие числа. Можно вместо символьных литералов явно указывать соответствующие им числа, если только ты точно знаешь с какой кодировкой работаешь.
Код:
if (ch >=65 && ch <= 90)


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

как выглядел бы код если бы не имело значения каким регистром вводить?

В данном случае
Код:
if ((ch >= 'A' && ch <= 'Z') || (ch >='a' && ch <= 'z'))

Re: вопросы полного чайника

Чт сен 04, 2014 11:41:08


не скажете что за ошибка ? :( ей богу достала уже
Код:
#include <windows.h>
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#pragma argsused
main()
{
int numer;
char str[9][50];
CharToOem("введите цифру дня недели\n", str[0]);
CharToOem("Понедельник\n",str[1]);
CharToOem("Вторник\n", str[2]);
CharToOem("Среда\n", str[3]);
CharToOem("Четверг\n", str[4]);
CharToOem("Пятница\n", str[5]);
CharToOem("Суббота\n", str[6]);
CharToOem("Воскресенье\n", str[7]);
CharToOem("На такую цифру нет дня недели\n", str[8]);
CharToOem("Введите цифру, а не другой символ :)\n", str[9]);
printf(str[0]);
printf("\n");
scanf("%f", &numer);
if(numer>='1'&&numer<='7')
switch(numer)
   {
   case1:printf(str[1]);break;
   case2:printf(str[2]);break;
   case3:printf(str[3]);break;

   }

это часть кода, остальное еще не дописал

Re: вопросы полного чайника

Чт сен 04, 2014 12:02:21

Возможно из-за обращения к несуществующему элементу массива str[9]. Ведь он объявлен как char str[9][50], то есть массив из 9 строк, от нулевой до восьмой включительно. А тут вдруг к девятой обращаются, которая на самом деле уже десятая, отсчет то с нуля начинается. Надо объявить массив как char str[10][50].

Re: вопросы полного чайника

Чт сен 04, 2014 12:12:52

а почему при компиляции ошибку не выдает ? а выскакивает только когда запускается приложение, и тупо виснет, через диспетчер задач приходиться закрывать или это нормальное явление для борландС++ 6,0 ? :)
попробую подправить, погляжу что выйдет

Re: вопросы полного чайника

Чт сен 04, 2014 13:11:40

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

Re: вопросы полного чайника

Сб сен 06, 2014 14:39:11

непонятно, зачем ты пишеш
Sam85 писал(а):CharToOem("Понедельник\n",str[1]);

у тебя массив, в который ты пихаеш набор букв, который ты воспринимаеш как строку
компутер не знает, что это строка, т.к. на конце массива нет символа \0, который обозначает конец строки
тебе нужно использовать строки и никакой оем там не нужен, используй юникод всегда
http://valera.asf.ru/cpp/book/c03_4_2.html
и если ты пишеш на с++, то используй плюсовые библиотеки <iostream>
а то у тебя файл цпп, а код сишный

Re: вопросы полного чайника

Ср сен 10, 2014 12:16:42

переведите пожалуйста эту строку :) на человеческий язык
Код:
if (c & 1) PORTB.4=1

Re: вопросы полного чайника

Ср сен 10, 2014 13:01:12

Скорее, такие вопросы нужно задавать в теме по Си :)
Строка означает - если 0-ой бит в переменной "с" равен единице, то установить четвёртый бит порта B.

Re: вопросы полного чайника

Чт сен 11, 2014 04:07:56

Да начинал с МК, но постепенно дошел до Си :)
Пошли вопросы :) почему именно 0-ой бит ? и как выглядела бы запись, если бы вместо 0-го бита мне нужен был бы 4-ый.
И не кинете ссылку, где можно почитать про логические и битовые операции, но только что бы было описано и разжевано, а то, то что находил сам в голове толком не укладывается :( и желательно с примерами
P.S. Только не гугл в помощь :) ?

Re: вопросы полного чайника

Чт сен 11, 2014 07:33:49

почему именно 0-ой бит ?
Честно говоря, не знаем - код то не наш, и что задумывал автор - неизвестно :)

Sam85 писал(а):как выглядела бы запись, если бы вместо 0-го бита мне нужен был бы 4-ый.
Код:
if (c & 0x10)
или
Код:
if (c & (1<<4))
, что эквивалентно друг другу.

Sam85 писал(а):P.S. Только не гугл в помощь :) ?
Ну а почему бы и нет ? Вы пробовали ? :)
Ответить