Только что выучил С на этой неделе. Моя задача состоит в том, чтобы получить большой большой целочисленный ввод от пользователя, сохранить его в struct Integer и сделать функцию для печати соответствующего структурного целого для стандартного вывода. Программа работает как таковая, но как только она дает результат, она перестает отвечать. Я не получаю никакой прямой ошибки в компиляторе и не могу понять, что не так. Любые другие советы/подсказки, чтобы улучшить стиль программирования также будет очень ценна :)Нужна помощь в отладке кода C
// Header Files Go Here
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function Declarations Go Here
struct integer * convert_integer(char * stringInt);
void printer(struct integer * p);
struct integer {
int * arr;
int length;
};
// Main Program
int main() {
char * x;
x = (char *) malloc(sizeof(char) * 10000);
printf("Enter a small string\n");
scanf("%s",x);
int j = 0;
struct integer * book1;
book1 = convert_integer(x);
printer(book1);
return 0;
}
// Function Definitions Go Here
struct integer * convert_integer(char * stringInt) {
struct integer * x = malloc(sizeof(int) * 100);
int j = 0;
while (stringInt[j] != '\0') {
if (stringInt[j] < 48 || stringInt[j] >= 57) {
printf("Invalid input. Enter a number ");
return;
}
x->arr[j] = stringInt[j] - 48;
j++;
}
x->length = j;
printf("\n the length is %d\n", x->length);
return x;
}
void printer(struct integer * p) {
int j = 0;
while (j < p->length) {
printf("%d", p->arr[j]);
j++;
}
}
Гораздо лучшее решение для использования динамического массива: используйте стек и реализуйте его со связанным списком. Разум бы вы всегда интересовались только одной цифрой за раз. –
@JacobPollack, справедливо, я сделаю это в ближайшее время. Но я думаю, что важно понять, почему я столкнулся с такой ошибкой :) –