gpt4 book ai didi

c语言结果在windows 10中不同

转载 作者:行者123 更新时间:2023-11-30 20:47:50 25 4
gpt4 key购买 nike

结果看起来像是错误!代码结果在window 10和ubuntu中是不同的正如我预期的结果是:

如果输入5;预期结果(它在ubunt中工作)

5数字5

不能被3整除。

5(适用于 Windows 10)数字 5 - 35

能被3整除。

在 Visual Studio 中(Cl.exe 退出代码 2)

我不知道为什么我的结果中附加了-35并且计算错误!

在窗口 10 eclipse 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 整除。

最佳答案

在 Windows 上,您似乎会读到 \r这会给你 -35 因为 \r值为 13。

您需要确保列表中不包含非数字。

所以改变

while (c != '\n') {

while (isdigit(c)) {

或者如果您想手动检查(而不是使用 isdigit )

while (c >= '0' && c <= '9') {

注:isdigit需要 #include <ctype.h>

Linux 和 Windows 上的不同结果是因为它们对“换行符”的定义不同。 Linux 只使用“\n”,而 Windows 使用“\r\n”

关于c语言结果在windows 10中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com