私のプログラムからユーザー入力を受け取り、それを関数AddNumber
に渡す方法を理解できない。プログラムが起動し、ユーザーの入力を求めて入力配列に格納しますが、配列から情報を取り出して関数AddNumber
に渡す方法がわかりません。AddNumber関数の問題
私は「AddNumber」関数が何もしないことを理解しているので、コードを更新しました。私は、前のポインタが 'previous'であるという印を作成していましたか?
#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;
}
を機能させるあなたは直接 ')(' sscanf関数からの戻り値をチェックする必要があります。変換が成功したかどうかを教えてくれます。 '' strncmp() '呼び出しは' printer'を意味し、 'かなり'は 'print'と' quit'と同じ扱いになります。 –
マイナーな問題:15または16-1のような "one-less"は 'fgets(input、15、stdin)'では不要で、 'fgets(input、sizeof input、stdin) 'のように16を使うことに注意してください。 – chux