Рейтинг:
4
Kornfeld Eliyahu Peter
Вы работаете со строковым представлением 123, поэтому на самом деле вы работаете со значениями 31, 32, 33 (ASCII (HEX) значения символа '1', '2', '3')...
Так что вы ни за что не получите "правильное" значение...
Не понимая причин такого непонятного кода... сделайте это:
1. Реверс строки
2. Преобразовать его в числовое
3. +1
4. Преобразовать в строку
5. Повернуть его вспять
OriginalGriff
*кашель* гекс *кашель*
Kornfeld Eliyahu Peter
Ну же! Вы должны оставить что-то молодым!!!
Member 13887543
спасибо за вашу помощь. это сработало.
Рейтинг:
12
OriginalGriff
Посмотри на свой код.
Вы добавляете единицу к первому символу в строке:
x[i]=x[i] + 1;
Таким образом, строка становится "223". Затем вы разрабатываете свой перенос:
carry=x[i]/10;
который... не делает того, что ты думаешь...
x[i] - это значение символа и содержит '2' - это не то же самое, что значение 2, это символ, поэтому на самом деле он имеет значение 50 как число:
Таблица Ascii - коды символов ASCII и html, восьмеричное, шестнадцатеричное и десятичное преобразование диаграмм[
^Поэтому, когда вы делите это на десять, вы получаете 5.
Остальная часть вашего кода просто портит строку, потому что вы не поняли, в чем разница между символами и числами.
Теперь я понятия не имею, что должен делать этот код, поэтому я определенно не могу исправить его для вас - и не стал бы, если бы мог, это ваша домашняя работа, в конце концов, не моя. Поэтому я бы посоветовал вам вернуться к первоначальной постановке задачи, которую вам дал ваш наставник, и прочитать ее снова, очень внимательно - этот код почти наверняка не будет делать ничего подобного тому, что вы хотите!
Member 13887543
Это мой модифицированный код. У меня возникли проблемы с такими числами, как 99,199,999... в котором нет 9-х больше, чем 2, как в 99-м я получаю выход как
00, но не 100.......и я получаю ошибку сегментации с этими числами с числами, которые мой вывод верен....что мне нужно исправить в моем коде???
#включить <stdio.h>
#include <string.h>
char *return_and_pass(char x[]) // или char return_and_pass(char *s)
{ int i,carry,l=strlen(x);
i=0;
если(x[i]< '9')
{ x[i]=x[i]-'0' + '1';
ставит(x);}
еще
{
x[i]='0';
перенос=1;
я++;
в то время как(carry>0)
{ if(x[i]='9')
{ x[i]='0';
перенос=1;
я++;
если(i==l)
{x[i]='1';}
}
еще
{ x[i]=x[i] - '0' + '1';
carry=(x[i]-'0')/10;
если(x[i]> '9')
{ x[i]=(x[i]-'0')%10;
я++;}
}
}
}
ставит(x);
вернуться х;
//вернуть его
}
void rev(char x[])
{
int i,carry,l=strlen(x);
чар к;
для(i=0;i<l/2;i++)
{
k=x[i];
x[i]=x[l-i-1];
x[l-i-1]=k;
}
}
тап_п()
{
char a[10];
получает(а);
оборотов(а);
ставит(return_and_pass(а));
возвращает 0;
}
Member 13887543
**редактировать**
в строке 3-й "с другими номерами *"
OriginalGriff
Итак, что вы пытались сделать, чтобы выяснить, почему?
Вы использовали отладчик?
Вы пробовали этот алгоритм вручную, прежде чем начать кодирование?
Подсказка: нет, вы этого не сделали - что было большой ошибкой. Почему? Потому что вы работаете не с того конца. Подумайте об этом: если я дам вам число, например 12345, и вы добавите к нему единицу, вы ожидаете, что начнете с добавления 1 к 1 или 5?
Вот что я хотел бы сделать: написать функцию, которая принимает указатель на символ и целое число и возвращает целое число. Функция добавляет целое число к символу указателя, нормализует его до цифры и возвращает 1, Если символ был больше 9 до нормализации. С другой стороны, он возвращает ноль. Это значение 0 или 1 является вашим "переносом" на следующую цифру. Заставьте это работать - и это довольно просто - и вы можете вызвать его в цикле, чтобы сделать все цифры, независимо от того, сколько их есть. Просто начните с наименее значимой цифры.
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Member 13887543
Спасибо! это действительно помогло
OriginalGriff
Всегда пожалуйста!