c - AddNumber 函数问题

标签 c

我无法理解如何从程序中获取用户输入并将其传递到函数 AddNumber 中。该程序将启动并要求用户输入并将其存储到输入数组中,但我不确定如何从数组中获取信息并将其传递给函数AddNumber

我已经更新了代码,据我了解,我的“AddNumber”函数没有执行任何操作。我的印象是我创建了指针“previous”,应该 previous = NULL 吗?

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

typedef struct A_NewNumber {
  struct A_NewNumber *next;
  char newNum;
} NewNumber;

NewNumber *AddNumber(NewNumber *previous, char *input){

//char input[16];
//double numEntered = 0;

NewNumber *newNum = malloc(sizeof(NewNumber));
sscanf(input, "%lf", &newNum->newNum);

//sscanf(input, "%s", newNum->enterNumber);
//numEntered = atof(input);
//possible code 
/*if (previous != NULL){
    previous->newNum;
}
newNum->next = NULL;
newNum->newNum = 0;
return newNum;

}*/


void PrintList(NewNumber *numStart) {
  NewNumber *currentNumber = numStart;
  int count = 0;

  while (currentNumber != NULL) {
    count++;
    printf("Number Position:%s\n", currentNumber->enterNumber);
    currentNumber = currentNumber->next;
  }
  printf("Total Numbers Entered%d\n", count);
}

void CleanUp(NewNumber *start) {
  NewNumber *freeMe = start;
  NewNumber *holdMe = NULL;

  while (freeMe != NULL) {
    holdMe = freeMe->next;
    free(freeMe);
    freeMe = holdMe;
  }
}

int main(){

   //indexNum = 0;
   char command[16];
   char input[16];
   //float userInput;
   NewNumber *userEnter = NULL;
   NewNumber *start = NULL;
   NewNumber *newest = NULL;

   while(fgets(input, sizeof input, stdin)){
    printf("Please enter a number->");
    printf("Enter 'quit' to stop or 'print' to print/calculate");
    sscanf(input, "%s", command);
    if(newest == NULL){
        start = AddNumber(NULL, input);
        newest = start;
    }else{
        newest = AddNumber(newest, input);
    }
    if( strncmp(command, "print", 5) == 0){
        PrintList(start);
    }else if( strncmp(command, "quit", 4)== 0){
        printf("\n\nQuitting....\n");
        break;
        //userInput = enterNumber;
    }
  }
  CleanUp(start);
  return 0;
}

最佳答案

在不过多修改代码的情况下,我建议 AddNumber 采用指向前一个 NewNumber 的指针以及用户输入。您的意图似乎是也要读取 double ,因此我将 newNum 字段修改为 double 类型。像这样的事情:

typedef struct A_NewNumber{
    struct A_NewNumber *next;
    double newNum;
} NewNumber;

NewNumber *AddNumber(NewNumber *previous, char *input){

    NewNumber *newNum = malloc(sizeof(NewNumber));
    /* use %lf to read in a double */
    sscanf(input, "%lf", &newNum->newNum);

    if (previous != NULL){
        previous->next = newNum;
    }

    return newNum;
}

然后,当您调用 AddNumber 函数时,您可以传递前一个和输入,例如

if(newest == NULL){
    start = AddNumber(NULL, input);
    newest = start;
} else {
    newest = AddNumber(newest, input);
}

关于c - AddNumber 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421127/

相关文章:

c - 如何在不使用 dirname() 的情况下从完整路径获取目录名称?

c - 在 Ansi-C VS2010 项目中包含 Agilent 驱动程序会导致错误 LNK2001

c - 当我执行 malloc(1) 时,它在 char* 中分配 8 个空格,我不知道为什么

c - dlopen 问题(OSX)

c - 如何修复 C 中数组指针的打印错误(段错误)?

c - `const volatile`类型限定符的实时应用有哪些?

C - 按下 KeyCode(不是 stdio)

c - 谁提供了C标准库gcc或glibc?

C - 从输入文件中读取,将测试分数转换为字母等级,计算平均值,提取每个测试的最小值和最大值

c++ - 开罗图形库是可重入的吗?