gpt4 book ai didi

c - 当 input.txt 文件传递​​给它时,简单的 C 代码无法正常工作

转载 作者:行者123 更新时间:2023-11-30 19:10:01 25 4
gpt4 key购买 nike

所以我编写了一个简单的C代码,它生成斐波那契的N个成员,然后将每个成员写入链表节点,然后将其全部写出。

我在 Geany 的 Windows 中编写代码,但我在 ubuntu 中测试了代码,因为 gcc 在 Windows 中工作得很奇怪。我已经编写了代码,它编译构建并运行,当我输入所有内容时,它运行良好,一切都很好。例如输入为 1 5 2 3。1是输入N个成员(member)数的菜单选择,5是用户选择的成员数量,2用于生成节点并将其写入节点中3 用于将其全部打印出来。一切都运行良好,但问题是,当我获取一个写有 1 5 2 3 的 in.txt 文件并将其传递给带有以下代码的代码时猫在.txt | Ubuntu 中的 ./fibonacci > out.txt 命令,我的 out.txt 文件很大,包含大量重复输出。如果我直接输入数字 3,我会收到一条消息,提示“列表为空”,这很好。但是,当我在 in.txt 文件中仅输入数字 3 并运行命令时,我在 out.txt 中得到 150 MB 的“列表为空”。因此,当我将作业转入大学里的某种自 Action 业检查器时,也会发生同样的事情,作业给了我一个红色的大十字。我真的不明白问题是什么,为什么我有一个功能完美的程序,当它直接运行时,但当输入文件用一个数字 3 传递给它时,我会收到无限的“列表为空”消息作为我的输出在我的 out.txt 文件中。

这是代码

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

#ifndef DEBUG
#define DEBUG(...) printf(__VA_ARGS__)
#endif

typedef struct Node {
struct Node *next;
int val;
} node;

int entry()
{
int n;
scanf("%d", &n);
if(n <= 0) return -1;

return n;

}
int make_list ( int val, node **head )
{
node *new, *current;
new=(node*) malloc(sizeof(node));
if(!new) return -1;

new->val = val;
new->next=NULL;

if(!*head){
*head = new;
}else {
for(current=*head; current->next != NULL; current= current->next);
current->next = new;
}

return 0;
}

int fibonacci ( int n, node **head ){
int i, f1=0, f2=1, next=0;
if ( n <= 0 ) return -1;
for(i=1; i<n; i++){
if(i==1){
make_list(f1, head);
continue;
}
if(i==2){
make_list(f2, head);
continue;
}
next = f1+f2;
f1=f2;
f2=next;
make_list(next, head);
}
return 1;
}

int print( node *head){
node *current;

if(!head) return -1;

for(current=head; current!=NULL; current=current->next){
printf("%d ", current->val);
}
return 0;
}


int main(int argc, char **argv)
{
node *head=NULL;
char menu_choice;
int retval, n;

do {
DEBUG("\n(1) Enter number of Fibonacci members \n(2) Generate N numbers of Fibonacci \n(3) Print out list \n(e) Exit\n");

scanf(" %c", &menu_choice);
switch (menu_choice) {
case '1':
retval = entry();
n = retval;
if (retval == -1) printf("You entered negative number\n");
break;
case '2':
retval = fibonacci(n+1, &head);
if (retval==1) printf("Numbers are generated\n");
if (retval==-1) printf("Not possible to generate numbers\n");
break;
case '3':
retval = print(head);
if (retval==-1) printf("List is empty\n");
break;
}
} while(menu_choice!='e');





return 0;

}

最佳答案

您的输入不包含程序终止命令'e'。此外,您没有检查 scanf 的结果。因此,这两者结合起来使您的程序无限循环,并使用 menu_choice 中的陈旧值(在您的情况下为 '3'),将相应的输出写入文件。

关于c - 当 input.txt 文件传递​​给它时,简单的 C 代码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42006056/

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