2015-04-22 5 views
0

У меня есть эта домашняя работа, и это дает мне головную боль, потому что я не могу найти то, что я делаю неправильно.Преобразование массива символов в массив ints

В основном, он должен читать определенное количество символов, будучи «х» последним символом и хранить их в памяти кучи.

После этого программа должна сортировать ее, используя таблицу ASCII.

Затем он должен читать каждые четыре символа как int. Количество символов ввода всегда будет кратным четырем, поэтому он будет работать каждый раз.

Последнее, но не менее важное, оно должно печатать целые числа.

Моя проблема: программа печатает целые числа в неправильном порядке.

Вот он идет:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    int cont = 1; 
    int i, j, tmp; 
    char c; 
    char *dados = NULL; 

    do 
    { 
     scanf("%s", &c); 
     dados = (char*)realloc(dados, sizeof(char)*cont); 
     dados[cont - 1] = c; 
     cont++; 
    } 
    while(c != 'x'); 

    for (i = 0; i < (cont - 1); i++) 
    { 
     for (j = 0; j < (cont - i - 1); j++) 
     { 
      if (dados[j] > dados[j + 1]) 
      { 
       tmp = dados[j]; 
       dados[j] = dados[j + 1]; 
       dados[j + 1] = tmp; 
      } 
     } 
    } 

    int *charInt = (int*)dados; 
    int aux = sizeof(int); 

    for(i = 1; i <= (cont - 1); i = i + aux) 
    { 
     printf("%d\n", *charInt); 
     ++charInt; 
    } 

    return 0; 
} 
+5

Может быть хорошей идеей дать некоторый образец ввода, ожидаемый выход и фактический выход. – kaylum

+0

Было бы неплохо добавить комментарии в код. – Michas

+0

Скажите, если я понимаю, вы сортируете массив символов в соответствии со значением asci, тогда вы хотите напечатать это значение в порядке? – crashxxl

ответ

0

Я сделал некоторые изменения. Следующий код должен работать.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    int cont = 0; 
    int i, j, tmp; 
    char c; 
    char *dados = NULL; 
    dados = malloc(sizeof(char)); 
    do 
    { 
     scanf("%s", &c); 
     dados = (char*)realloc(dados, sizeof(char)*cont); 
     dados[cont] = c; 
     cont++; 

    } 
    while(c != 'x'); 
    for (i = 0; i < (cont - 2); i++) 
    { 
     for (j = 0; j < (cont - i - 2); j++) 
     { 
      if (dados[j] > dados[j + 1]) 
      { 
       tmp = dados[j]; 
       dados[j] = dados[j + 1]; 
       dados[j + 1] = tmp; 
      } 
     } 
    } 

    char *charInt = (char*)dados; 
    int aux = sizeof(char); 

    for(i = 0; i <= (cont - 2)*aux; i = i + aux) 
    { 
     printf("%d\n",*charInt); 

     ++charInt; 
    } 

    return 0; 
} 
+0

Этот ответ содержит множество ошибок оригинала (переполнение буфера и т. Д.). –

+0

Я знаю об ошибках из исходного кода. Я пытался заставить его работать с минимальными исправлениями, я просто заметил переполнение буфера. – baranbaris

Смежные вопросы