Помогите разобраться
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
somewhere, в задании написано вывести именно символьную строку.
У меня выдает ошибку,что невозможно преобразовать long int в char. Как поступить?
У меня выдает ошибку,что невозможно преобразовать long int в char. Как поступить?
Это не ответ на вопрос. В задании написано, что строка должна быть частью структуры? Какой смысл в структуре? Почему символьная строка находится в составе структуры, а не просто в виде переменной?в задании написано вывести именно символьную строку.
Нормальный препод не обойдет этот момент стороной, если конечно задача сдается не за деньги или другие блага.
Дайте угадаю - устранить ошибку?)) Вы даже не сказали в какой строке и код не привелиУ меня выдает ошибку,что невозможно преобразовать long int в char. Как поступить?
It's a long way to the top if you wanna rock'n'roll
Код: Выделить всё
#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;
}
}
Код: Выделить всё
cpp(43) : error C2440: =: невозможно преобразовать 'long' в 'char [42]'
Потому что нельзя выполнить numbers.num%base, получить int и записать в numbers.conv, т.к. поле conv это массив из char и вообще непонятно зачем создано в этой программе.
It's a long way to the top if you wanna rock'n'roll
somewhere, а как тогда написать,не используя структуры? Ввести число, занести его в массив,вывести и так i-раз? Я пробовала так,но у меня не получилась.
P.S: завтра сдавать эту программу,а она вообще не готова
Я забрала переменную num,оставила только массив, поменяла char на int, и мне выдает следующие сообщения:
P.S: завтра сдавать эту программу,а она вообще не готова

Я забрала переменную 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);
}
Да вы прочитайте еще раз пост #4 внимательно, там же все написано
It's a long way to the top if you wanna rock'n'roll
Romeo писал(а): Следующий шаг - исправляем функцию конвертации. В цикле вычисляем остатки от деления и заносим их в numbers.conv, причём вносим не просто остаток, а остаток + '0' (символ ноль) для того, чтобы туда попало не просто число, а символ, соответствующий этому числу.
Я не понимаю,что значит "вносим не просто остаток,а остаток + '0' "
Смысле так?Если обратно conv поменять на char
numbers.conv=numbers.num%base+'0';
Conv - это массив из цифр. Целиком. Все 42 символа сразу.
It's a long way to the top if you wanna rock'n'roll
Если преобразовать, например, число 8 в символ - то получим символ с кодом 8, а это не восьмерка - это вроде как backspace. А все цифры начинаются с кода 48, что соответствует нулю, 49 - единице и т.д. Запись вида 8 + '0' означает, что компилятор сформирует символ с кодом 8 + код символа '0' (48) - итого будет символ с кодом 56 - то есть восьмеркаЯ не понимаю,что значит "вносим не просто остаток,а остаток + '0' "

It's a long way to the top if you wanna rock'n'roll
Я поняла для чего это надо. Спасибо)
По идеи это должно выглядеть так?
numbers.conv=(numbers.num%base)+'0';
numbers.num=numbers.num/base;
По идеи это должно выглядеть так?
numbers.conv=(numbers.num%base)+'0';
numbers.num=numbers.num/base;