在 C 中使用 char* arr 输入和读取超过 200 个字符的非常长的数字
Inputing and reading realy long numbers over 200 characters using char* arr in C
我被困在一项作业中,我必须从控制台读取非常长的数字,然后使用 char* arr 将其打印出来。然后我需要将 number 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 != '[=10=]') {
*(number1 + i) = retVal;
if ((number1 + i) == NULL) {
break;
}
printf("%d", atoi((number1 + i)));
i++;
}
else
{
break;
}
}
return 0;
}
感谢您的帮助
由于数量没有限制,需要使用动态内存分配
直接的(蛮力)方法是不断增加分配的大小
char *input = calloc(1, 1); // space for '[=10=]'
size_t len = 0;
for (;;) {
int ch = getchar();
if (ch != '\n') {
input[len] = ch; // replace '[=10=]' with ch
len++;
char *tmp = realloc(input, len + 1);
if (tmp == NULL) exit(EXIT_FAILURE);
input = tmp;
input[len] = 0; // add '[=10=]'
} else {
break;
}
}
// use input and len
free(input);
我被困在一项作业中,我必须从控制台读取非常长的数字,然后使用 char* arr 将其打印出来。然后我需要将 number 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 != '[=10=]') {
*(number1 + i) = retVal;
if ((number1 + i) == NULL) {
break;
}
printf("%d", atoi((number1 + i)));
i++;
}
else
{
break;
}
}
return 0;
}
感谢您的帮助
由于数量没有限制,需要使用动态内存分配
直接的(蛮力)方法是不断增加分配的大小
char *input = calloc(1, 1); // space for '[=10=]'
size_t len = 0;
for (;;) {
int ch = getchar();
if (ch != '\n') {
input[len] = ch; // replace '[=10=]' with ch
len++;
char *tmp = realloc(input, len + 1);
if (tmp == NULL) exit(EXIT_FAILURE);
input = tmp;
input[len] = 0; // add '[=10=]'
} else {
break;
}
}
// use input and len
free(input);