【问题标题】:Inputing and reading realy long numbers over 200 characters using char* arr in C在 C 中使用 char* arr 输入和读取超过 200 个字符的超长数字
【发布时间】:2021-08-21 18:12:21
【问题描述】:

我被困在一个作业上,我必须从控制台读取很长的数字,然后使用 char* arr 将其打印出来。然后我需要将数字 1 数组加减到 number2 数组。老实说,加减法我可能会自己处理,但我不知道如何逐个字符地读取这些输入字符,并在输入控制台后进行中断。

我的代码:

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

int subtract(const char* number1, const char* number2, char** result){
if(number1 == NULL || number2 == NULL){
        return 1;
    }
return 0;
}
int add(const char* number1, const char* number2, char** result) {
    if(number1 == NULL || number2 == NULL){
        return 1;
    }
    return 0;
}

int input_check(int check, char* number) {
    if (check != 1) {
        return 1;
    }
    else {
        return 0;
    }

}

int main()
{
    char* number1;
    //char* number2;
    //char** result;
    int check = 0;

    number1 = (char*)calloc(200,sizeof(char));
    //number2 = (char*)calloc(200, sizeof(char));
    //result = (char*)malloc(sizeof(char) * sizeof(char) * 400);
    if (number1 == NULL) {
        printf("Failed to allocate memory");
        return 8;
    }
    
    printf("Input first num: ");
    
    int i = 0;
    while (1) {
        char retVal;
        scanf("%c", &retVal);
        if (retVal >= 48 || retVal <= 57 || retVal != '\0') {
            *(number1 + i) = retVal;
            if ((number1 + i) == NULL) {
                break;
            }
            printf("%d", atoi((number1 + i)));
            i++;
        }
        else
        {
            break;
        }
    }
    
    return 0;
}

感谢您的帮助

【问题讨论】:

  • 输入数字有最大字符数吗?只需将其用于数组...char input1[MAXLEN + 1] = {0}, input2[MAXLEN + 1] = {0}, sum[MAXLEN + 2] = {0};
  • 不,最大字符数没有限制
  • 我认为在您的条件检查retVal 中,您的 OR (||) 需要替换为 AND (&amp;&amp;)。此外,一个方便的提示是您不必使用 48 和 57。您可以与 '0''9' 进行比较。检查 NUL 字符也可能没有用,因为输入行以换行符 ('\n') 而不是 NUL ('\0') 结尾。此外,如果您的号码是 200 个字符,则需要分配 201 以便在末尾有一个 NUL 终止符。
  • 如果您将*(number1 + i) 替换为number1[i],您还将修复至少一个错误并使您的代码更具可读性。
  • 或者至少,将scanf替换为getchar

标签: arrays c char dynamic-memory-allocation


【解决方案1】:

由于数量没有限制,所以需要使用动态内存分配。

直接的(蛮力)方法是不断增加分配的大小

char *input = calloc(1, 1); // space for '\0'
size_t len = 0;
for (;;) {
    int ch = getchar();
    if (ch != '\n') {
        input[len] = ch; // replace '\0' with ch
        len++;
        char *tmp = realloc(input, len + 1);
        if (tmp == NULL) exit(EXIT_FAILURE);
        input = tmp;
        input[len] = 0; // add '\0'
    } else {
        break;
    }
}
// use input and len
free(input);

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2014-02-08
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多