cAddNumber功能故障



我很难理解如何从我的程序中获取用户输入并将其传递到函数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:%sn", currentNumber->enterNumber);
    currentNumber = currentNumber->next;
  }
  printf("Total Numbers Entered%dn", 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("nnQuitting....n");
        break;
        //userInput = enterNumber;
    }
  }
  CleanUp(start);
  return 0;
}

在不修改代码太多的情况下,我建议AddNumber接受一个指向前一个NewNumber以及用户输入的指针。您的意图似乎是在double s中阅读,所以我会将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);
}

一些问题:

代码无效

if (previous != NULL){
    // Following line does no assignment
    previous->newNum;
}

当然,在分配之后,所有字段都应该设置

NewNumber *newNum = malloc(sizeof(NewNumber));
sscanf(input, "%s", newNum->enterNumber);
// add
newNum->next = NULL;
newNum->newNum = 0; // TBD code, but set to something

指向函数的指针类型错误

NewNumber *AddNumber(NewNumber *previous){
....
char input[16];
....
start = AddNumber(input);

在大多数编程语言中,通常都有一种内置的方式来获取用户输入。例如,在Java中,您可以使用Scanner对象来提示用户从命令行输入。这是一个命令行应用程序吗?

这是C语言,所以我鼓励你使用scanf()函数,下面是它如何工作的一个简短片段https://en.wikibooks.org/wiki/C_Programming/Simple_input_and_output#Input_using_scanf.28.29

只需要提供数据类型(例如%s表示string)和内存地址。这可以通过一个指针保存,你可以把它传递给你的AddNumber()函数。

希望这对你有帮助!

最新更新