Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何创建一个程序,能够从用户那里获取最多1000位的两个数字,然后打印结果?_C_Arrays_String_Max_Digits - Fatal编程技术网

C 如何创建一个程序,能够从用户那里获取最多1000位的两个数字,然后打印结果?

C 如何创建一个程序,能够从用户那里获取最多1000位的两个数字,然后打印结果?,c,arrays,string,max,digits,C,Arrays,String,Max,Digits,我正在尝试创建一个程序,能够从用户那里获得两个最大为1000位的数字,然后用C编程语言打印结果 创建此程序的注意事项: 1获取两个数字,使用长度为1000个字符的字符串。 2-要存储数字,请使用两个长度为1000 block home的数组。大数字的每个数字必须存储在单独的数组块中。例如:365 3存储在blockhome中,6存储在另一个块中,然后 3-要获取字符串形式的数字并将其转换为数字数组、加法、减法和打印大数字,请使用分离函数。主要功能必须非常小 我写了这段代码,但不明白为什么它不起作

我正在尝试创建一个程序,能够从用户那里获得两个最大为1000位的数字,然后用C编程语言打印结果

创建此程序的注意事项:

1获取两个数字,使用长度为1000个字符的字符串。 2-要存储数字,请使用两个长度为1000 block home的数组。大数字的每个数字必须存储在单独的数组块中。例如:365 3存储在blockhome中,6存储在另一个块中,然后

3-要获取字符串形式的数字并将其转换为数字数组、加法、减法和打印大数字,请使用分离函数。主要功能必须非常小

我写了这段代码,但不明白为什么它不起作用:

/*codes*/


#include <conio.h>
#include <stdio.h>
#define hang 1

void sinascan1(char sina[2],int i){
     puts("Enter number 1");
     gets(sina);
    while (i != hang){
          sina[i] -= 48;
          printf ("%d\n", sina[i]);
          i++;
          }
     }
void sinascan2(char sina1[2],int i){
     puts("Enter number 2");
     gets(sina1);
    while (i != hang){
          sina1[i] -= 48;
          printf ("%d\n", sina1[i]);
          i++;
          }
     }
void sinajam(char sina[2],char sina1[2],char jam[3],int i){
     puts("____");
     int f,g;
     while (i != hang){ 
           jam[i]=sina[i]+sina1[i];
           printf ("%d\n", jam[i]);
           i++;
           }
     }
int main()
{   int i=0;
    char sina[2],sina1[2];
    char jam[2];
    sinascan1(sina,i);
    sinascan2(sina1,i);
    sinajam(sina,sina1,jam,i);
    getch();
    return 0;
}
<>我怎么能做到呢?

< P>我认为在结尾处的字符为零是点:

char str[1000]; //number of digits
int i=0;

while(true){
    scanf("%c", (str+i));
    if( *(str+i) == '0') break;
}

我不是很确定,但我认为至少要给一个点

首先,在一个大小为2的数组中存储1000个字符是很困难的!C语言对程序员非常自信,从不控制数组的容量。。。简单地说,它会导致未定义的行为,因为您试图在内存中写入无法存在或用于其他任何内容的内容

下一步在手册中用闪烁的红色覆盖gets函数写下:永远不要使用它!。它本质上是不安全的,因为您在没有任何方式知道输入大小的情况下在定义大小的数组中写入字符串!请始终使用FGET,这样可以将输入字符串限制为缓冲区的大小

最后,但它远没有其他两个严重,除非您有特殊要求,否则请避免使用conio.h,因为它不能跨不同的体系结构移植

所有这些都是你的程序可能导致意外结果或不可移植的原因,但这还不是全部:当我比今天年轻得多的时候,我学会了添加两个数字,你可以添加它们的数字,但当两个数字的总和大于9时,比如说6+7=13,这里只保留低位数字3和进位1到下一列。你从低位开始加数字

您当前拥有的只能添加1位数的数字

下面是一个可能的实现:

#include <stdio.h>
#include <memory.h>
#include <string.h>
#define SIZE 1000

void sinascan(char* sina, int size, int i){ 
    char *c = sina;
    int l;
    int temp;

    ::memset(sina, 0, size); /* initialize buffer to 0 */
    printf("Enter number %d : ", i);
    fgets(sina, size , stdin);
    while ((*c >= '0') && (*c <= '9')) { /* only get digits */
          c++;
          }
    *c = 0; /* remove optional spaces and end of line */
    /* now reverse digits so that sina[0] is low order digit */
    l = strlen(sina);
    for (i=0; i<l/2 + 1; i++) {
        temp = sina[i];
        sina[i] = sina[l - 1 - i];
        sina[l - 1 - i] = temp;
    }
    for (i=0; i<l; i++) {
        sina[i] -= '0';
    }
     }


int sinajam(char *sina,char *sina1,char *jam, int size){
     puts("____");
     int i,sum, carry = 0;
     for (i=0; i<size; i++ ) {
           sum = sina[i] +sina1[i] + carry;
           jam[i] = sum % 10;
           carry = sum / 10;
           printf ("%d", jam[i]);
           }
     return carry;
     }
int main()
{   int i=0;
    char sina[SIZE+1],sina1[SIZE+1]; /* add one place for terminating null */
    char jam[SIZE];
    sinascan(sina,SIZE+1, 1);
    sinascan(sina1, SIZE+1, 2);
    i = sinajam(sina,sina1,jam,SIZE);
    if (i != 0) {
        puts("overflow");
    }
    return 0;
}

此实现接受多达1000位的输入,生成多达1000位的总和,并发出溢出信号。

使用调试器检查代码。如果您使用的是linux,那么gdb是一个不错的选择。如果在Windows Visual Studio中有一个好的编译器/调试器组合,COMPOLER是DEV C++;1代码中没有任何内容建议将输入限制为1000位。2得到肯定是个问题。使用fgets。它不起作用,而且非常不精确。你用什么输入测试它,结果是什么?零是'\0',char str[1000+1];scanf%1000s,str;