Помогите разобраться

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Helen11
Сообщения: 31
Зарегистрирован: 21 сен 2013, 22:44

somewhere, в задании написано вывести именно символьную строку.
У меня выдает ошибку,что невозможно преобразовать long int в char. Как поступить?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

в задании написано вывести именно символьную строку.
Это не ответ на вопрос. В задании написано, что строка должна быть частью структуры? Какой смысл в структуре? Почему символьная строка находится в составе структуры, а не просто в виде переменной?
Нормальный препод не обойдет этот момент стороной, если конечно задача сдается не за деньги или другие блага.
У меня выдает ошибку,что невозможно преобразовать long int в char. Как поступить?
Дайте угадаю - устранить ошибку?)) Вы даже не сказали в какой строке и код не привели
It's a long way to the top if you wanna rock'n'roll
Helen11
Сообщения: 31
Зарегистрирован: 21 сен 2013, 22:44

Код: Выделить всё

#include "stdafx.h"
#include <stdio.h>
#define N 200

// структура, хранящая информацию об одном числе
struct NumberInfo
{
   long int num; // само число
   char conv[42]; // сконвертированное число
}

// массив структур, хранящий информацию о всех исходных и сконвертированных числах
numbers[N];

int i;
int k;


void convertNumber(void);
void reverse(void);

int main (void)
{

	printf("Number to convert? '0'-end" );
	for (i=0;i<N;i++)
	{
	scanf("%li",&numbers[i].num);
		if(numbers[i].num =='\0')
		break;
		else
			convertNumber();
		    reverse();
	}
return 0;
}
void convertNumber(void)
{
	int base=3;
    
do
	{
		numbers[i].conv=numbers[i].num%base;
		numbers[i].num=numbers[i].num/base;
		
	}

	while(numbers[i].num!=0);
}

void reverse(void)
{
	int j,k,tmp;
	char *p=&numbers[i].conv;
		gets(numbers[i].conv);
		while(*p)
		{	p++;}
		for(k=0;k<=(p-numbers[i].conv);k++)
	for(j=(p-numbers[i].conv)-1;0<j;j--)
	{
		j=numbers[i].conv[0];
		k=numbers[i].conv+p;
	}




}
Строка ошибки 43-и сообщение.

Код: Выделить всё

cpp(43) : error C2440: =: невозможно преобразовать 'long' в 'char [42]'
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Потому что нельзя выполнить numbers.num%base, получить int и записать в numbers.conv, т.к. поле conv это массив из char и вообще непонятно зачем создано в этой программе.
It's a long way to the top if you wanna rock'n'roll
Helen11
Сообщения: 31
Зарегистрирован: 21 сен 2013, 22:44

somewhere, а как тогда написать,не используя структуры? Ввести число, занести его в массив,вывести и так i-раз? Я пробовала так,но у меня не получилась.
P.S: завтра сдавать эту программу,а она вообще не готова :rolleyes:


Я забрала переменную num,оставила только массив, поменяла char на int, и мне выдает следующие сообщения:

Код: Выделить всё

cpp(43) : error C2296: %: недопустимо, левый операнд имеет тип "int [42]"
          cpp(44) : error C2296: /: недопустимо, левый операнд имеет тип "int [42]"

Код: Выделить всё

#include "stdafx.h"
#include <stdio.h>
#define N 200

// структура, хранящая информацию об одном числе
struct NumberInfo
{
  // long int num; // само число
   int conv[42]; // сконвертированное число
}

// массив структур, хранящий информацию о всех исходных и сконвертированных числах
numbers[N];

int i;
int k;


void convertNumber(void);
void reverse(void);

int main (void)
{

    printf("Number to convert? '0'-end" );
    for (i=0;i<N;i++)
    {
    scanf("%li",&numbers[i].conv);
        if(numbers[i].conv =='\0')
        break;
        else
            convertNumber();
            reverse();
    }
return 0;
}
void convertNumber(void)
{
    int base=3;
   
do
    {
        numbers[i].conv=numbers[i].conv%base;
        numbers[i].conv=numbers[i].conv/base;
       
    }

    while(numbers[i].conv!=0);
}
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Да вы прочитайте еще раз пост #4 внимательно, там же все написано
It's a long way to the top if you wanna rock'n'roll
Helen11
Сообщения: 31
Зарегистрирован: 21 сен 2013, 22:44

Romeo писал(а): Следующий шаг - исправляем функцию конвертации. В цикле вычисляем остатки от деления и заносим их в numbers.conv, причём вносим не просто остаток, а остаток + '0' (символ ноль) для того, чтобы туда попало не просто число, а символ, соответствующий этому числу.


Я не понимаю,что значит "вносим не просто остаток,а остаток + '0' "
Смысле так?Если обратно conv поменять на char
numbers.conv=numbers.num%base+'0';
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Conv - это массив из цифр. Целиком. Все 42 символа сразу.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Я не понимаю,что значит "вносим не просто остаток,а остаток + '0' "
Если преобразовать, например, число 8 в символ - то получим символ с кодом 8, а это не восьмерка - это вроде как backspace. А все цифры начинаются с кода 48, что соответствует нулю, 49 - единице и т.д. Запись вида 8 + '0' означает, что компилятор сформирует символ с кодом 8 + код символа '0' (48) - итого будет символ с кодом 56 - то есть восьмерка
Изображение
It's a long way to the top if you wanna rock'n'roll
Helen11
Сообщения: 31
Зарегистрирован: 21 сен 2013, 22:44

Я поняла для чего это надо. Спасибо)
По идеи это должно выглядеть так?
numbers.conv=(numbers.num%base)+'0';
numbers.num=numbers.num/base;
Ответить