Результат выглядит как ошибка!
результат кода отличается в окне 10 и Ubuntu
как я и ожидал, результат:
если ввод 5;
ожидаемый результат (работает в убунте)
5
№ 5
не делится на 3.
5 (работает в windows 10)
№ 5 - 35
делится на 3.
в Visual Studio (код выхода Cl.exe 2)
Понятия не имею, почему в моем результате указано -35 и неправильный расчет!
в окне 10 затмение Cygwin GCC
#include <stdio.h>
#include <stdlib.h>
struct digit
{
int num;
struct digit *next;
};
struct digit *createDigit(int dig);
struct digit * append(struct digit * end, struct digit * newDigptr);
void printNumber(struct digit *start);
struct digit *readNumber(void);
void freeNumber(struct digit *start);
int divisibleByThree(struct digit *ptr);
int main(void) {
struct digit *start;
start = readNumber();
printf("The number ");
printNumber(start);
if (divisibleByThree(start))
printf("is divisible by 3.\n");
else
printf("is not divisible by 3.\n");
freeNumber(start);
return 0;
}
struct digit *createDigit(int dig) {
struct digit *ptr;
ptr = (struct digit *) malloc(sizeof(struct digit));
ptr->num = dig;
ptr->next = NULL;
return ptr;
}
struct digit * append(struct digit * end, struct digit * newDigptr) {
end->next = newDigptr;
return(end->next);
}
void printNumber(struct digit *start) {
struct digit * ptr = start;
while (ptr!=NULL) {
printf("%d", ptr->num);
ptr = ptr->next;
}
printf("\n");
}
void freeNumber(struct digit *start) {
struct digit * ptr = start;
struct digit * tmp;
while (ptr!=NULL) {
tmp = ptr->next;
free(ptr);
ptr = tmp;
}
}
struct digit *readNumber(void) {
char c; // read character
int d;
struct digit *start, *end, *newptr;
start = NULL;
scanf("%c", &c);
while (c != '\n') {
d = c - 48; // character to integer
newptr = createDigit(d);
if (start == NULL) {
start = newptr;
end = start;
} else {
end = append(end, newptr); // linked to each other
}
scanf("%c", &c);
}
return(start);
}
int divisibleByThree(struct digit *start){
struct digit *ptr = start;
int i = ptr->num;
int divisible = 3;
while( ptr->next!= NULL){
i = ptr->next->num + (i % divisible)*10;
ptr = ptr->next;
}
//printf("\n%d\n",i);
if(i % divisible) return 0;
else return 1;
}
5
№ 5
не делится на 3.
5
№ 5 - 35
делится на 3.