30.05.2020, 07:38 [+3 UTC]
в нашей команде: 4 572 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.89 (25.04.2020)
JS-v.1.45 | CSS-v.3.39

Общие новости:
13.04.2020, 00:02

Форум:
29.05.2020, 13:47

Последний вопрос:
29.05.2020, 23:49
Всего: 152517

Последний ответ:
30.05.2020, 06:22
Всего: 260216

Последняя рассылка:
30.05.2020, 02:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
13.11.2011, 22:24 »
Stanislav Bolshakov
спасибо за развернутый ответ [вопрос № 184443, ответ № 268735]
18.08.2019, 16:03 »
dar777
Это самое лучшее решение! [вопрос № 196114, ответ № 278528]
23.08.2009, 09:05 »
Медведева Елена Владимировна
Молодцы! Так держать!!!

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 1552
var
Статус: 7-й класс
Рейтинг: 860
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 481

Перейти к консультации №:
 

Консультация онлайн # 188954
Раздел: • С / С++
Автор вопроса: Yaroslav (Посетитель)
Отправлена: 16.03.2016, 17:23
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, помогите исправить код:
Условие задачи: функция int stonum( char *str ), преобразует строку цифр str
(возможен ведущий знак ‘+’ или ‘-‘) в число типа int.

Я уже написал эту программу, это 2-ая версия, тк теперь пытаюсь научиться использовать только указатели. Но, скорее всего, не до конца понял принципы работы с ними. Пожалуйста, помогите найти ошибки и разобраться с ними!

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int stonum( char *str );
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    printf("Введите строку чисел str: ");
    char str[128];
    gets(str);
    printf("Результат: %d", stonum(str));
    return 0;
}
int stonum( char *str )
{
    int zn=1,k=1,res=1;
    if (*str=='-')
    {
        zn=-1;
        str++;
    }

    for (; *str!='\0'; str++)
    {
        if ((*str>='48') && (*str<='57'))
            k=k*10;
    }
    for (; *str!='\0'; str++)
    {
        res+=(*str-'0')*k;
        k/=10;
    }
 res=(zn*res)/10;
    return res;
}

Состояние: Консультация закрыта

Ответ # 273475 от D-mon55 (2-й класс)

Здравствуйте, YarLam125!
1) if ((*str>='48') && (*str<='57')) заменить на if ((*str>='0') && (*str<='9')). либо убрать одинарные кавычки.
2) У Вас отсутствует проверка на "+"
Ну и причина - Вы не возвращаете указатель str на начало массива перед вторым циклом.


Консультировал: D-mon55 (2-й класс)
Дата отправки: 17.03.2016, 14:31

5
нет комментария
-----
Дата оценки: 17.03.2016, 17:06

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 188954

D-mon55
2-й класс

ID: 398702

# 1

 +1 
 
= общий = | 16.03.2016, 19:53 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

У Вас очень странный алгоритм...ну да ладно. Каждый извращается по своему.
1) if ((*str>='48') && (*str<='57')) заменить на if ((*str>='0') && (*str<='9')). либо убрать одинарные кавычки.
2) У Вас отсутствует проверка на "+"
Ну и причина - Вы не возвращаете указатель str на начало массива перед вторым циклом.

Ваш исправленный код:

#include <stdio.h>
#include <stdlib.h>
 
int stonum( char *str );
int main()
{
  
    printf("Введите строку чисел str2: ");
    char str[128];
    gets(str);
    printf("Результат: %d", stonum(str));
    return 0;
}
int stonum( char *str )
{
    int zn=1,k=1,res=1;
    if (*str=='-')
    {
        zn=-1;
        str++;
    }
    char *temp = str;
    for (; *str!='\0'; str++)
    {
        if ((*str>='0') && (*str<='9'))
            k=k*10;
    }
    str = temp;
    for (; *str!='\0'; str++)
    {
        res+=(*str-'0')*k;
        k/=10;
    }
 res=(zn*res)/10;
    return res;
}


Моё извращение (может что-то возьмете на заметку):
int main()
{
  char string [256];
  printf ("Введите последовательность чисел: ");
  gets (string);     // warning: unsafe (see fgets instead)
  printf("Результат: %d", stonum(string));
  return 0;
}

bool isNumber(char ch){
	if ((ch>='0') && (ch<='9')) return true;
	return false;	
}

int stonum( char* str)
{
	bool isSign = false;
	if ((*str == '+') || (*str == '-')) {
		if (*str == '-') isSign = true;		
		str++;	
	}		
	
	if (isNumber(*str)) {
		int number = *str - '0'; 
		while(isNumber(*(++str))){		
			number *= 10;
			number += *str - '0';
		}
		return ((isSign) ? -number : number);
	}
	return 0;	// Bad number.
}

// Не помню есть ли в С bool и true. при необходимости заменить на int и 1.

Yaroslav
Посетитель

ID: 399292

# 2

= общий = | 16.03.2016, 20:31 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
D-mon55:

Спасибо большое за помощь!

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 3

= общий = | 17.03.2016, 09:14 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
D-mon55:


может ответите?

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Лысков Игорь Витальевич
Мастер-Эксперт

ID: 7438

# 4

= общий = | 17.03.2016, 20:55 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
D-mon55:

© Цитата: D-mon55
есть ли в С bool и true
Есть! smile

=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.18104 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.89 от 25.04.2020
Версия JS: 1.45 | Версия CSS: 3.39