【发布时间】:2013-12-01 19:22:33
【问题描述】:
我想编写一个程序,它接受用户最后提示的输入并按顺序打印它们。 这是我有问题的代码sn-p:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
//#include <termios.h>
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#define MAXCHARNUM 128
#define MAXARGNUM 32
char *argsexec[MAXARGNUM];
char str[500];
char *path;
char *name;
int length;
int sizeOfHistory=0;
struct History{
char *hname;
struct History *nextPtr;
struct History *prevPtr;
}*nextPtr=NULL,*prevPtr=NULL;
struct History *Head = NULL;
struct History *Tail = NULL;
struct History *Temp = NULL;
struct History *Temp2 = NULL;
struct History *historyTemp = NULL;
void HistoryList(char *historyName){
struct History *historyTemp = (struct History *)malloc(sizeof(struct History));
if(sizeOfHistory == 0)
{
historyTemp->hname=historyName;
historyTemp->prevPtr = NULL;
historyTemp->nextPtr = NULL;
Tail = historyTemp;
Head = historyTemp;
sizeOfHistory++;
printf("Histtemp's :%s ",historyTemp->hname);
printf("Head's name: %s ",Head->hname);
printf("Tail's name: %s ",Tail->hname);
}
else if (sizeOfHistory < 10){
historyTemp->hname=historyName;
historyTemp->prevPtr = NULL;
historyTemp->nextPtr = NULL;
Head->prevPtr = historyTemp;
historyTemp->nextPtr = Head;
Head = historyTemp;
sizeOfHistory++;
printf("Head's name: %s ",Head->hname);
}
else{
historyTemp->hname=historyName;
Head->prevPtr = historyTemp;
historyTemp->nextPtr = Head;
Head = historyTemp;
Tail=Tail->prevPtr;
Temp=Tail->nextPtr;
Tail->nextPtr = NULL;
Temp->prevPtr = NULL;
free(Temp);
}
//historyTemp=NULL;
}
void printHistory(){
int counter=1;
struct History *historyT=NULL;
historyT = Head;
while(historyT != NULL){
printf("[%d] [%s] \n",counter,historyT->hname);
historyT=historyT->nextPtr;
counter++;
}
}
void Setup(){
while(1){
while (!feof(stdin))
{
fgets(str, sizeof(str), stdin);
HistoryList(str);
}
}
}
int main(int argc, char const *argv[])
{
Setup();
return 0;
}
通常在程序从用户那里获得第二次输入后,它应该只更改 historyTemp 的 hname。
但它也改变了头部和尾部。我怎样才能改变它?我究竟做错了什么?提前致谢。
【问题讨论】:
标签: c list shell unix pointers