Что не так с Атои? - PullRequest
       3

Что не так с Атои?

0 голосов
/ 11 декабря 2018

Я пытаюсь написать программу, которая читает файл и суммирует все числа, которые находятся в интервале от 0 до 9, чтобы он мог распознавать число 6 как 6 и число 12 как 1 и 2 или что-то в этом роде.Вот код, который обычно суммирует числа от 0 до 9, но обманчиво суммирует числа вроде 12. Например, я даю указатель функции atoi, который указывает на 1, и atoi возвращает число 12 вместо 1, а затем возвращает 2, так что сумма этих чисел будет14 вместо 3. Не знаю, почему это происходит! Спасибо всем за плодотворные решения.

void sumNumbers(FILE *INCOME_stream)
{

  char defaultNumbers[]={'0','1','2','3','4','5','6','7','8','9'};
  char* defNum_ptr=defaultNumbers;
  char stream_string[maxLength];
  char* stream_string_ptr=stream_string;
  while(fgets(stream_string_ptr,maxLength,INCOME_stream)!=NULL)
  {  int numb=0;

   int stringLength=strlen(stream_string_ptr);
   for(int z=0;z<stringLength;z++)
   {
     for(int h=0;h<sizeof(defaultNumbers);h++)
     {
       if(*(stream_string_ptr+z)==*(defNum_ptr+h))
       {
         numb+=atoi(stream_string_ptr+z);

     }
     }
   }
 printf("sum=%d ",numb);
 } 

1 Ответ

0 голосов
/ 11 декабря 2018

Учитывая, что массив уже является указателем, я бы посоветовал:
Использовать strtol для сканирования строки, поскольку функция endptr отлично подходит для этой цели

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

#define maxLength 20

void sumNumbers(FILE *INCOME_stream)
{
    char stream_string[maxLength];
    while(fgets(stream_string, maxLength, INCOME_stream) != NULL)
    {
        int numb = 0;
        int app;
        int stringLength = strlen(stream_string);

        char *endptr = stream_string;
        while( endptr - stream_string < stringLength - 1)
        {
            app = strtol( endptr, &endptr, 10);
            if( app >=0 && app < 10)
                numb += app;
        }

        printf("sum=%d ", numb);
    }
}

int main()
{
    sumNumbers( stdin);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...