Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2012, 19:05   #1
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию 2 лабы. Проблема с вводом символов и определением размера массива.

Вот 1 лаба:
"Вводится последовательность целых чисел. Признак конца ввода – 0. Определить количество соседств двух чисел разного знака."

ВОт, что я написал:

Код:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <ctype.h>
main() 
{
int temp, i;
int counter;
int count = 13;
int arr[] = {4,-6,-6,2,1,-8,-9,3,2,-8,2,1,-2,2};       
       
/*i = 0;
do {
  scanf("%d",&temp);
  arr[i] = temp;
  i++;
} while(temp != 0);   
*/     
 
counter = 0; 
for (i=0; i<count; i++) {
   if (((arr[i] > 0) && (arr[i+1] < 0)) || ((arr[i] < 0) && (arr[i+1] > 0))) {
               counter++; 
      }
} 
            
//count = sizeof(arr) / sizeof(arr[0]); 
printf("%d", counter);       
return 0;       
}
А мне надо, чтобы массив заполнялся с клавиатуры. И чтобы размер его определялся динамически. Я вот закоментировал там то, что это должно вроде как делать, но не делает. Не понимаю почему. И вот 2 лабораторная:

"Дан массив x, состоящий из латинских букв. Исключить из него элементы, стоящие на чётных местах, затем элементы стоящие на нечётных местах упорядочить по неубыванию."

Вот, что я сделал:
Код:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <ctype.h>
void insertSort(char a[], int size)
{
    int i, j, tmp;
    for (i = 0; i < size; i++)
    {
        tmp = a[i];
        for (j = i - 1; j >= 0 && a[j] > tmp; j--)
            a[j + 1] = a[j];
        a[j + 1] = tmp;
    }
}
 
int main(void) {
int count = 10;
int i, j;
char str[] = {};
char temp[7] = {};
char ch;
 
 
i = 0;
do {
  scanf("%c", &ch);
  str[i] = ch;
  i++;
} while(i<count); 
 
count = sizeof(str) / sizeof(str[0]);
for (i=0; i<count; i++) {
    printf("%c ", str[i]);
}
printf("\n");
 
j = 0;
for (i=0; i<count; i++) {
    if (i%2==0) {
      temp[j] = str[i];
      j++; 
    } 
}
 
count = sizeof(temp) / sizeof(temp[0]);
for (i=0; i<count; i++) {
    printf("%c ", temp[i]);
}
 
printf("\n");
insertSort(temp, count);
 
    for (i=0; i<count; i++) {
      printf("%c ",temp[i]);        
    }
    
return 0;
}
Вот момент:
Код:
int count = 10;
int i, j;
char str[] = {};
char temp[7] = {};
char ch;
 
i = 0;
do {
  scanf("%c", &ch);
  str[i] = ch;
  i++;
} while(i<count);
Я заполняю массив посимвольно. И когда я ввожу элемент и жму enter, "enter" Тоже считается за элемент. Как сделать, чтобы не считался? Ещё я хочу, чтобы Размер массива char temp[7] = {}; задался динамически, в зависимости от количества элементов в str. Помогите, пожалуйста.


В общем мои проблемы в заполнении массива с клавиатуры и в работе с массивами.
prowoke вне форума Ответить с цитированием
Старый 08.03.2012, 19:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как сделать, чтобы не считался?
Заменить scanf() чем нибудь что считывает символ без ожидания например getch() из conio.h
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2012, 22:55   #3
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Заменить scanf() чем нибудь что считывает символ без ожидания например getch() из conio.h
Ничего не понимаю. Вот есть у меня такой вот код:
Код:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <ctype.h>
main() 
{
int temp, i;
int counter;
int count;
int arr[] = {}; 
       
printf("Input amount of elements\n");
scanf("%d", &count);    
printf("Input %d elements\n", count);


i = 0;
do {
  scanf("%d",&temp);
  arr[i] = temp;
  i++;
} while(i<count);  


counter = 0; 
for (i=0; i<count; i++) {
   if (((arr[i] > 0) && (arr[i+1] < 0)) || ((arr[i] < 0) && (arr[i+1] > 0))) {
               counter++; 
      }
} 
             
printf("%d", counter);       
return 0;       
}

Вот я так пытаюсь считать цифры с клавиатуры:

Код:
i = 0;
do {
  scanf("%d",&temp);
  arr[i] = temp;
  i++;
} while(i<count);
Ну он у меня считывает также и enter, когда я жму ввод. Если же я использую getch(), getchar(), getche. То у меня какая то белиберда получается, т.к. эти функции, как я понял возвращают код символа, а не саму цифру. Помогите, пожалуйста разобраться.
prowoke вне форума Ответить с цитированием
Старый 09.03.2012, 23:27   #4
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

Код:
for ( i = 0; i < count; ++i ){
    if ( (arr[i] = getchar()) == '\n' )
        break;
ERAGORN вне форума Ответить с цитированием
Старый 09.03.2012, 23:40   #5
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ERAGORN Посмотреть сообщение
Код:
for ( i = 0; i < count; ++i ){
    if ( (arr[i] = getchar()) == '\n' )
        break;
Что-то не то. Он ввобще пропускает посимвольный ввод.
Вот, что ввыводит:
Input amount of elements
10
Input 10 elements
2
prowoke вне форума Ответить с цитированием
Старый 10.03.2012, 00:08   #6
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

А если перед циклом поставить
fflush(stdin);
ERAGORN вне форума Ответить с цитированием
Старый 10.03.2012, 00:18   #7
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ERAGORN Посмотреть сообщение
А если перед циклом поставить
fflush(stdin);

Сделал, вот кусок кода:
Код:
printf("Input amount of elements\n");
scanf("%d", &count);    
printf("Input %d elements\n", count);

fflush(stdin);
for ( i = 0; i < count; ++i ){
    if ( (arr[i] = getchar()) == '\n' ) {
        break;
    }
}

for (i = 0; i<count; ++i) {
    printf("%d", arr[i]);
}
После ввода 10 цифр, выводит дикий набор цифр.
prowoke вне форума Ответить с цитированием
Старый 10.03.2012, 00:27   #8
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

printf("%d", arr[i]) --> printf("%c", arr[i])
ERAGORN вне форума Ответить с цитированием
Старый 10.03.2012, 00:32   #9
prowoke
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ERAGORN Посмотреть сообщение
printf("%d", arr[i]) --> printf("%c", arr[i])
Выводит билиберду, какие то левые символы там появляются.
Вообще я вот ща что заметил. У меня задание немного по другому звучит. Там 0, означает конец ввода.
"27. Вводится последовательность целых чисел. Признак конца ввода – 0. Определить количество соседств двух чисел разного знака."

И во втором задании, мне тоже нужно вводить символы, только уже латинские буквы. Скажите мне лучше, где вообще прочитать про ввод символы с клавиатуры в C, желательно с примерами и пояснениями, я думаю, я сам разбируюсь.
prowoke вне форума Ответить с цитированием
Старый 10.03.2012, 00:39   #10
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

если массив arr не из char - попробуйте сделать его таким.
ERAGORN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с определением кодировки ZePr Общие вопросы Delphi 8 08.01.2012 15:03
проблема с определением параметра при реализации запроса Margarett Помощь студентам 3 14.03.2010 17:56
Проблема с определением процента загрузки процессора Jogik_86 Помощь студентам 0 17.12.2009 03:28
Проблема с определением строки в макросе Евгений(mE) Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 17.11.2008 11:40
проблема с определением внешнего ключа! veter_s_morya SQL, базы данных 1 26.06.2008 18:37