2016-09-09 67 views
0

我无法理解如何从我的程序中获取用户输入并将其传递到函数AddNumber。程序将开始并询问用户输入并将其存储到输入数组中,但我不确定如何从阵列中获取信息并将其传递给函数AddNumberAddNumber功能故障

我已经更新了代码,从我的理解中我的'AddNumber'函数没有做任何事情。我的印象是我创建了指针'previous'should 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; 
} 
+0

您应该直接从'sscanf的检查返回值()';这会告诉你转换是否成功。还要注意你的''strncmp()'调用意味着'printer'和'quite'将被视为与'print'和'quit'相同。 –

+0

小问题:请注意,在fgets(input,15,stdin)中不需要15或16-1中的“one-less”,只需在'fgets(input,sizeof input,stdin)'中使用16即可' – chux

回答

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; 
} 

然后,你可以通过以前和输入,当你调用像

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

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

这是C,所以我鼓励你使用scanf()的函数,这里是它如何工作https://en.wikibooks.org/wiki/C_Programming/Simple_input_and_output#Input_using_scanf.28.29

,你只需要提供数据类型(即%s的字符串)和一个小片段内存地址。这可以通过一个指针保存,你可以将它传递给你的AddNumber()函数。

希望这会有所帮助!

+0

所以在sscanf()函数中,我可以这样说,sscanf(输入,%s,&enterNumber); ? –

0

的AddNumber功能有些problmes:

代码没有任何影响

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); 
+0

我更新了代码,是否解决了一些问题? –