Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 27 из 87<  1 ... 24  25  26  27  28  29  30 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
jeki
Код:
char *a,aa[20]="";
    while (*a!=13)

А ту уверен? Чему *a равен?
и что такое 13 символ? может проще '\n' - тем более чтение идет в текстовой интерпретации.
Код:
strcat(aa,"\0");

Зачем?
Код:
return(*aa);

И что это? Вернуть символ по адрессу aa? то есть первый сивол из строки? и присовить его первому символу из aaa?
Код:
int main()
{
      while('\n' != ( char c = getch() ) && ( c != EOF)) {
            if(isalpha(c)) {
                  putch(c);
            }
      }
      putch('\n');
}

Это решиение на С

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо



Партнер
 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
Откуда: Чайковский.
nickyoz Спасибо, но мне надо чтобы введенная строка запоминалась в какой-либо переменной, именно с объединением строки и нового символа у меня проблема. 13 символ это Enter. Ах да и если можешь скажи как оформить все это функцией т.к. будет использоваться не 1 раз

_________________
Никогда не говори никогда!


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
jeki писал(а):
но мне надо чтобы введенная строка запоминалась в какой-либо переменной,

добавь после путча код
Код:
*a = c;
a++;

соответственно a это char a[20];
и в конец добавь \0


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
jeki писал(а):
13 символ это Enter.

НЕТ - читать маны

jeki Ограничение не запоминающуюся строку надо вводить?
Добавлено спустя 5 минут, 12 секунд
Код:
void main(char* str, int str_l)
{
      str_l--;
      whil(e('\n' != ( char c = getch() ) && ( c != EOF)) && (str_l > 0)) {
            if(isalpha(c)) {
                  *(str++) = c;
                  str_l--;
            }
      }
      *str = 0;
}

Вход: выделенный буфер и его размер.
Выход: в выделенный буфер помещается введеная строка только из символов.

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
Откуда: Чайковский.
Цитата:
jeki писал(а):
13 символ это Enter.

НЕТ - читать маны

то что 13 это код Enter я помню еще с паскаля.

Спасибо за помощь.

_________________
Никогда не говори никогда!


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
В такой функции по хорошему нужно останавливать ввод(и ожидать энтер) по достижении максимальной длинны строки, сам список разрешённых символов лучше составлять/проверять самому(гибче получится функция), и для красоты и удобства нужно ловить и обрабатывать BackSpace :) - тремя строчками тут не обойтись.


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
mein
Код:
В такой функции по хорошему нужно останавливать ввод

Ой. А консоль с каких пор у нас синхронная?
mein писал(а):
сам список разрешённых символов лучше составлять/проверять самому(гибче получится функция)

Ага. Для любого языка. Флаг в руки :)
mein писал(а):
и для красоты и удобства нужно ловить и обрабатывать BackSpace

А консоль на что?

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
nickyoz мы как буд-то говорим совершенно о разном. Я перечислил некоторые прелести, которые хотел бы видеть у себя к примеру в таких функциях, но из твоих слов следует что это будет автоматом. На последних страницах не было кода реализующего эти самые прелести. Вот к примеру взял последний твой пример(сори за тавтологию) и совсем чуть модифицировал до работоспособности:
Код:
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
void xxx(char* str, int str_l){
    str_l--;
    char c;
    while( ('\n' != ( c = getch() ) && ( c != EOF) ) && (str_l > 0) ){
        if(isalpha(c)) {
              *(str++) = c;
              str_l--;
        }
    }
    *str = 0;
}
int main(int argc, char *argv[])
{
    char str[20];
    xxx(str,10);
    cout<<str<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

После ввода последнего(по длинне) символа функция завершается, бэкспэйс не работает(даже если забыть что вывода нет, с ним тоже самое) . Кстати с '\n' не работает :oops: - нужен '\r' .
А по поводу фильтра я несколько о другом говорил: например о вводе только цифр или чего-то в этом роде. Да и многоязыковые консольные программы редкость - всё на английском в основном(что к лучшему).


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
mein писал(а):
Кстати с '\n' не работает Embarassed - нужен '\r'

Патаму что '\n' - это перевод строки, а ентер - это возврат каретки ('\r'). :D


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
mein Ладно. Но раз ты использовал C++, то тогда уж лучше темлпэйтами писать

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
nickyoz писал(а):
Но раз ты использовал C++, то тогда уж лучше темлпэйтами писать

блин, я просто глянул в msdn первой ссылкой было это:
Код:
template<Class CharType>
   bool isalpha(
      CharType _Ch,
      const locale& _Loc
   ) const;

вот и понесло меня в с++ :) . Хотя сейчас уже увидел, что и в обычно си имеется такое.


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
mein :)
На темплэйтах может быть завтра напишу
тама вообще без цикла
токо боюсь человека это испугает

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
Ужас — только взялся плотно за QT, сразу напоролся на гнуснейший баг:
http://www.trolltech.com/developer/task ... thod=entry
не везет мне :(
Интересно, «4.2.2 (Next Patch Release)» — это когда?… ээх… опять придется извращаться…
Добавлено спустя 11 часов, 30 минут, 49 секунд
Самое ужасное, что я всю ночь угробил, пытаясь понять, почему ничего не работает… чуть с ума не сошел)

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 20.12.2002
Откуда: Санкт-Петербург
Здравствуйте. Не могу разобраться с одной фишкой. С выводом обработанных данных после выполнения всех циклов сортировки структуры.. Вроде сначала в табличке было 10 элементов, а на выводе осталось 9.. )

Проблема, как мне видится, тут:

Код:
//number,quantity sorting
   for (i=1;i<quant;i++)
   {
      for(j=quant;j>=1;j--)
      {
         if ((pr[j].year == pr[j-1].year) && (pr[j].month == pr[j-1].month) && (pr[j].day == pr[j-1].day) && (pr[j].number < pr[j-1].number))
         {
         temp = pr[j];
         pr[j] = pr[j-1];
         pr[j-1] = temp;
         }
      }
   printf("%9s %13d\t\t\t %3d.%2d.%4d \n",pr[i].name,pr[i].number,pr[i].day,pr[i].month,pr[i].year+1900);
   }


Полный код - тут:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


const quant=10;

struct products
   {
   char name[20];
   int number,day,month,year;
   };

int i,j,tmp;

struct products temp;
struct products pr[quant];

//int compare (const void *a, const void *b)
//{
//   if (strcmp(pr.year[a],pr.year[b])>0)
//      return 1; else
//   if (strcmp(pr.month[a],pr.month[b])>0) && (strcmp(pr.year[a],pr.year[b])>0)
//      return 1; else
//   if (strcmp(pr.day[a],pr.day[b])>0) && (strcmp(pr.month[a],pr.month[b])>0) && (strcmp(pr.year[a],pr.year[b])>0)
//      return 1; else
//   if (strcmp(pr.number[a],pr.number[b])>0) && (strcmp(pr.day[a],pr.day[b])>0) && (strcmp(pr.month[a],pr.month[b])>0) && (strcmp(pr.year[a],pr.year[b])>0)
//      return 1; else
//      return -1;
//}

void main()
{

   srand(1369);
   

   strcpy(pr[1].name,"#1:Toy");
   strcpy(pr[2].name,"#2:Radio");
   strcpy(pr[3].name,"#3:Robot");
   strcpy(pr[4].name,"#4:Weapon");
   strcpy(pr[5].name,"#5:PC");
   strcpy(pr[6].name,"#6:Pic");
   strcpy(pr[7].name,"#7:TV set");
   strcpy(pr[8].name,"#8:Flower");
   strcpy(pr[9].name,"#9:Player");
   strcpy(pr[10].name,"#10:Beer");

   printf("------------------UNSORTED STRUCTURE------------------\n");
   printf("------------------------------------------------------\n");
   printf("     Name:     Quantity:         Time of buy (d.m.y): \n");
         printf("------------------------------------------------------\n");




   for(i=1;i<=quant;i++){
      pr[i].number=fmod(rand(),50);
      pr[i].year=fmod(rand(),99);
      pr[i].month=fmod(rand(),11)+1;
      pr[i].day=fmod(rand(),30);

// needed for all sorting cycles check.. "antirandom"
      pr[1].year=89;
      pr[2].year=89;
      pr[3].year=89;
      pr[4].year=89;
      pr[1].month=11;
      pr[2].month=11;
      pr[3].month=11;
      pr[1].day=15;
      pr[2].day=15;
   
      printf("%9s %13d\t\t\t %3d.%2d.%4d \n",pr[i].name,pr[i].number,pr[i].day,pr[i].month,pr[i].year+1900);
      
                  }
   printf("------------------------------------------------------\n\n\n\n\n");

   printf("======================================================\n");
   printf("--------------------SORTED STRUCTURE------------------\n");
   printf("------------------------------------------------------\n");
   printf("     Name:     Quantity:         Time of buy (d.m.y): \n");
    printf("------------------------------------------------------\n");




// year sorting   
   for (i=1;i<=quant;i++)
   {
      for(j=quant;j>=1;j--)
      {
         if(pr[j].year < pr[j-1].year)
               {
            temp = pr[j];
               pr[j] = pr[j-1];
               pr[j-1] = temp;
               }
         
      }
   
   }

//month sorting
   for (i=1;i<=quant;i++)
   {
      for(j=quant;j>=1;j--)
      {
         if ((pr[j].year == pr[j-1].year) && (pr[j].month < pr[j-1].month))
         {
         temp = pr[j];
         pr[j] = pr[j-1];
         pr[j-1] = temp;
         }
      }
   }

//day sorting
   for (i=1;i<=quant;i++)
   {
      for(j=quant;j>=1;j--)
      {
         if ((pr[j].year == pr[j-1].year) && (pr[j].month == pr[j-1].month) && (pr[j].day < pr[j-1].day))
         {
         temp = pr[j];
         pr[j] = pr[j-1];
         pr[j-1] = temp;
         }
      }
   }

//number,quantity sorting
   for (i=1;i<quant;i++)
   {
      for(j=quant;j>=1;j--)
      {
         if ((pr[j].year == pr[j-1].year) && (pr[j].month == pr[j-1].month) && (pr[j].day == pr[j-1].day) && (pr[j].number < pr[j-1].number))
         {
         temp = pr[j];
         pr[j] = pr[j-1];
         pr[j-1] = temp;
         }
      }
   printf("%9s %13d\t\t\t %3d.%2d.%4d \n",pr[i].name,pr[i].number,pr[i].day,pr[i].month,pr[i].year+1900);
   }

}


если загнать в компилятор и запустить - проблема будет видна наглядно )
одного отсортированного товара не хватает..
Я уже не знаю, что и думать
Плюс еще появляется вечный
warning C4244: '=' : conversion from 'double' to 'int', possible loss of data
Подставляешь double вместо int в
Код:
   int number,day,month,year;
- происходят совершенно страшные вещи.. )


И еще - не завалялось ни у кого простейшей программки для работы с текстовыми файлами? Нужно удалить из *.txt все слова, содержащиеся в заданной строке.

Языком начал заниматься около недели назад, в работе с текстом ничерта не понимаю, да, впрочем, и с остальным-то не лучше.. )

Заранее спасибо!


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
О, Барсег)

В Си нумерация элементов массива идет с нуля (нормальный компилятор должен был тебя побить еще за это — «strcpy(pr[10].name,"#10:Beer");»), отсюда все твои проблемы.

Bar3ikk писал(а):
conversion from 'double' to 'int',

fmod возвращает double.

Bar3ikk писал(а):
происходят совершенно страшные вещи.. )

Какие?)

Bar3ikk писал(а):
И еще - не завалялось ни у кого простейшей программки для работы с текстовыми файлами?

Чего-нибудь откопаем)
Добавлено спустя 14 минут, 37 секунд
Anoss писал(а):
происходят совершенно страшные вещи.. )

Если ты имеешь в виду косяки при сортировке, то напрямую проверять на равенство числа с плавающей запятой нельзя из-за ошибок округления…

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 20.12.2002
Откуда: Санкт-Петербург
Anoss Барсег, он самый, коллега =)

Т.е. надо присваивать значения элементам от 0 до 9?
И то же самое делать в циклах?

Anoss писал(а):
fmod возвращает double.

что он возвращает, я понял.. А вот как это лечить.. )

Какие страшные вещи? Ну.. Неформатированный вывод, что-ли, не знаю, как это еще назвать..
вместо 23.11.1967, например, там сейчас 1074726492. 0.1077018624 )
В паскале это как-то делалось для типа real ... :5:2 и прочее.. тут - темный лес.

Anoss писал(а):
Чего-нибудь откопаем)

Будь добр ) очень нужно) Потом еще одно задание могу предоставить.. xD


 

Member
Статус: Не в сети
Регистрация: 01.04.2005
Откуда: Москва-Лубянка
Bar3ikk писал(а):
Т.е. надо присваивать значения элементам от 0 до 9? И то же самое делать в циклах?

Ага.

Bar3ikk писал(а):
как это лечить

1. Использовать обычный оператор % ;)
Код:
pr[i].number = rand() % 50;

2. Писать «pr[i].number = (int)fmod(rand(),50);», что есть изврат)

Bar3ikk писал(а):
Неформатированный вывод

%d (%i) — это int, для double нужны %f, %e, %g по вкусу… читай справку по printf)
Добавлено спустя 6 минут, 29 секунд
Хоть бы и вики… http://ru.wikipedia.org/wiki/Printf

_________________
AnossovPavel в проекте F@H (TSC!Russia)
退屈な祖父 ¤ παππούς ¤ («клан дедов»)


 

Member
Статус: Не в сети
Регистрация: 20.12.2002
Откуда: Санкт-Петербург
Anoss спасибо огромное, с этой программой все вышло! ни одной ошибки.. )

надо заданием с удалением строк из файла теперь заниматься!

С чего бы начать..? )


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Bar3ikk С изучения языка

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

исодние компилироваться не хочет:(

#include<dos.h>
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

#define PATHTODRIVER "C:\BORLANDC\BGI\"

void main()
{
int gdriver;
int i,x,y;
int gmode,errorcode;
unsigned char ch;
time_t t;

gdriver=DETECT;
initgraph(&gdriver,&gmode,PATHTODRIVER);
errorcode=graphresult();

if(errorcode!=grOK) printf("ahtung graphics!!!");

srand((unsigned) time(&t));
for(i=0;i<=10;i++)
{
x=rand()%639+0;
y=rand()%478+0;
settextstyle(rand()%4+0,HORIZ_DIR,10);
setcolor=rand()%14+1;
ch=("%i\n",rand()%31 +128);
outtextxy(x,y,ch);
// printf("%c\n",ch);
sleep(1);
}
closegraph();
getch();
}

в Borland С++ 3,11 ни одна функция из графикс.х не работает
кста Детект определяет Null

в чем прикол?


:insane::insane::insane:


Последний раз редактировалось A620 25.12.2006 0:03, всего редактировалось 1 раз.

Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 27 из 87<  1 ... 24  25  26  27  28  29  30 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan