Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Visual C++] Cчитываются две символьные строки


Автор: pharrell 27.11.2006, 14:01
Помогите исправить код:считываются две символьные строки в массивы,а затем поэлементно складываются.Выводит какието непонятные числа.Посмотрите пожалуйста,заранее Спасибо.
Код

#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxlen 400
#define resultat 500


int read_num(int ar[])
{
        char  s[maxlen],ch,*p=s;
        int    b=0;
        do{
          ch=getchar();
          if(ch>='0' && ch<='9') 
            {
             ar[p-s]=(ch-'0');
             *(p++)=ch;
             b++;
             }
          }
        while(ch>='0' && ch<='9');
        *p=0;
        printf("%d\n",strlen(s));
        return b;
}


void write_num(int ar[],int size)
{
    int i;
    for(i=0;i<=size;i++)
    {
        printf("%d",ar[i]);
    }
    printf("\n");

}

void main(void)
{
     int a,b;
     int i,j,k;
     int num_1[maxlen];
     int num_2[maxlen];
     int res[resultat];
     int flag=0;
     int tmp=0;
     int size_res=0;
     a=read_num(num_1);
     write_num(num_1,a-1);
     printf("\n\n\n");
     b=read_num(num_2);
     write_num(num_2,b-1);


//_______________________________________
     if(a>b)
     {
         for(i=0,j=0;i<=a,j<=b;i++,j++)
         {
             for(k=0;k<=a+1;k++)
             {
                 tmp=num_1[i]+num_2[j]+flag;
                 if(tmp<10)
                 {
                     res[k]=tmp;
                 }
                 else
                 {
                     res[k]=tmp-10;
                     flag=1;
                 }
                 size_res++;

             }
         }
     }
     printf("\n\n\n");
     for(k=0;k<=size_res-1;k++)
     {
         printf("%d",res[k]);
     }
}


Автор: JackYF 27.11.2006, 14:41
Почему ты считываешь в массивы char'ов( это нормально ), а внешние переменные - массивы int'ов?
В частности в функциях read_num и write_num должны быть
char ar[], а не int ar[].

Соответственно поменяй типы и в основной программе.

Автор: pharrell 27.11.2006, 16:19
Вообще я хотел считать строку в массив целых чисел.Ну а если поменять int на char,то результата тоже нет

Автор: JackYF 27.11.2006, 17:27
И printf("%c",res[k]);

Иначе printf пытается преобразовать все, что бы ты ему там не подал, в длинное целое.

Автор: Любитель 27.11.2006, 17:38
Тогда уж
Код

printf("%c", res[k] + '0');
(для данной задачи)

Автор: sergejzr 27.11.2006, 17:38
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Alexeis 27.11.2006, 18:07

M
alexeis1
Модератор: Название темы должно отражать ее суть!

Автор: pharrell 29.11.2006, 00:07
Вот наворотил тут и не работаетюНикак не могу понять в чем ошибкаюПомогите пожалуйста.Заранее спасиб
Код

#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxlen 400
#define result 500


int read_num(int ar[])
{
        char  ch;
        int    i=0;
        do{
          ch=getchar();
          if(ch>='0' && ch<='9') 
            {
              ar[i]=(ch-'0');
             }
          i++;
          }
        while(ch>='0' && ch<='9');

        printf("%d\n",i-1);
        return i-1;
}

void write_num(int ar[],int size)
{
    int i;
    for(i=0;i<size;i++)
    {
        printf("%d",ar[i]);
    }
    printf("\n");

}
void null(int ar[],int len)
{
    int i;
    for(i=0;i<=len;i++)
    {
        ar[i]=0;
    }
}

void main(void)
{
     int a,b,h=0;
     int i,j=0,k;
     int num_1[maxlen];
     int num_2[maxlen];
     int res[result];
     int flag;
     int tmp=0;
     null(num_1,maxlen);
     null(num_2,maxlen);
     null(res,maxlen+1);
     a=read_num(num_1);
     write_num(num_1,a);
     printf("\n\n\n");
     b=read_num(num_2);
     write_num(num_2,b);


//_______________________________________

     if(a>=b)
     {
         flag=0;
         for(i=a,j=b;i>=0,j>=0,k>=0;i--,j--,k--)
         {
        
             
                 tmp=num_1[i]+num_2[j]+flag;
                 if(tmp<10)
                 {
                     res[k]=tmp;
                 }
                 else
                 {
                     res[k]=tmp-10;
                     flag=1;
                 }
                 h++;

         }
     }
     printf("\n\n\n");
     for(k=0;k<h;k++)
     {
         printf("%d",res[k]);
     }
     printf("\n");
}




M
alexeis1
Модератор: не забывайте указывать тип подсветки.

Автор: Dov 29.11.2006, 13:32
Код
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>

#define maxlen 400
#define result 500

int read_num(int ar[])
{
    char  ch;
    int   i = 0;

    while((ch=getchar()) >= '0' && ch <= '9')
        ar[i++]=(ch - '0');        
    
    printf("%d\n", i);

    return i;
}

void write_num(int ar[], int size)
{
    int i;
    for(i = 0; i < size; i++)
        printf("%d", ar[i]);    
}

void main(void)
{
    int a,b,h=0;
    int i,j=0,k=0;
    int num_1[maxlen]={0};
    int num_2[maxlen]={0};
    int res[result]  ={0};
    int flag;
    int tmp=0;

    a=read_num(num_1);
    write_num(num_1,a);
    printf("\n");
    b=read_num(num_2);
    write_num(num_2,b);
    
    
    //_______________________________________
    
    flag=0;
    for(i=a-1,j=b-1;(i >= j ? i : j) >= 0 ;i--,j--)
    {
        tmp=num_1[i]+num_2[j]+flag;
        if(tmp<10)
        {
            res[k++]=tmp;
        }
        else
        {
            res[k++]=tmp-10;
            flag=1;
            if((i >= j ? i : j) == 0)
            {
                res[k]=flag;
                h++;
            }
        }
        h++;            
    }
    printf("\n\n\n");
    for(k=h-1;k>=0;k--)
    {
        printf("%d",res[k]);
    }
    printf("\n");
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)