2014-10-22 69 views
0

我一直在嘗試修復編譯該程序時遇到的幾個錯誤,但似乎無法找到任何解決方案。這些是實際代碼後面出現的以下錯誤。大部分錯誤是'一元*'問題,儘管我認爲這是使用它的正確方法。如果有人能指出我的方向是正確的,那將是非常有幫助的。無法編譯鏈接列表程序

testReadLinkedList.c:13: warning: no semicolon at end of struct or union 
testReadLinkedList.c: In function ‘insertListElement’: 
testReadLinkedList.c:31: error: incompatible types in assignment 
testReadLinkedList.c: In function ‘readFile’: 
testReadLinkedList.c:43: warning: comparison between pointer and integer 
testReadLinkedList.c: In function ‘countList’: 
testReadLinkedList.c:51: error: invalid initializer 
testReadLinkedList.c:54: error: invalid operands to binary != 
testReadLinkedList.c:56: error: invalid type argument of ‘unary *’ 
testReadLinkedList.c: In function ‘printList’: 
testReadLinkedList.c:65: error: invalid initializer 
testReadLinkedList.c:70: error: invalid type argument of ‘unary *’ 
testReadLinkedList.c:71: error: invalid type argument of ‘unary *’ 
testReadLinkedList.c:72: error: invalid type argument of ‘unary *’ 
testReadLinkedList.c:73: error: invalid type argument of ‘unary *’ 
testReadLinkedList.c:81: error: invalid type argument of ‘unary *’ 


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
#include <float.h> 

typedef struct LinkedListNode { 
    int red; 
    int green; 
    int blue; 
    char function[128]; 
    struct LinkedListNode* next 
} LinkedListNode; 

typedef struct { 
    LinkedListNode* head; 
} Linkedlist; 

void initLinkedList(Linkedlist* listIn) { 

    listIn = (Linkedlist*)malloc(sizeof(Linkedlist)); 
    (*listIn).head = NULL; 
} 

void insertListElement(Linkedlist* listIn, int redIn, int greenIn, int blueIn, char* functionIn) { 
    LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode)); 

    (*newNode).red = redIn; 
    (*newNode).green = greenIn; 
    (*newNode).blue = blueIn; 
    (*newNode).function = functionIn; 

    (*newNode).next = (*listIn).head; 
    (*listIn).head = newNode; 
} 

void readFile(FILE* fileIn, Linkedlist* listIn) { 

    char tempLine[128]; 
    int tempRed, tempGreen, tempBlue; 
    char tempFunction[128]; 

    while(fgets(tempLine, 128, fileIn) != EOF) { 
     sscanf(tempLine, "%d %d %d %[^\n]", &tempRed, &tempGreen, &tempBlue, tempFunction); 
     insertListElement(listIn, tempRed, tempGreen, tempBlue, tempFunction); 
    } 

} 

int countList(Linkedlist* listIn) { 
    LinkedListNode currNode = (*listIn).head; 
    int size = 0; 

    while(currNode != NULL) { 
     size++; 
     currNode = (*currNode).next; 
    } 
    return size; 
} 

void printList(Linkedlist* listIn) { 

    int i, tempRed, tempGreen, tempBlue; 
    char tempFunction[128]; 
    LinkedListNode currNode = (*listIn).head; 
    int listSize = countList(listIn); 

    for(i = 0;i < listSize; i++) { 

     tempRed = (*currNode).red; 
     tempGreen = (*currNode).green; 
     tempBlue = (*currNode).blue; 
     tempFunction = (*currNode).function; 

     printf("Red: %d\n",tempRed); 
     printf("Green: %d\n",tempGreen); 
     printf("Green: %d\n",tempBlue); 
     printf("Function: %s\n",tempFunction); 
     print("t\n"); 

     currNode = (*currNode).next; 
    } 

} 

int main(int argc, char** argv) { 

    FILE* f1; 
    Linkedlist* list1; 

    f1 = fopen(argv[1], "r"); 
    if(f1 == NULL) { 
     printf("Error: could not open file"); 
    } else { 
     initLinkedList(list1); 
     readFile(f1, list1);   
    } 

} 
+0

'testReadLinkedList.c:13:警告:沒有分號的結構或聯合結束' – 2014-10-22 12:06:35

回答

1
  1. struct LinkedListNode* next - >缺少分號。

  2. (*newNode).function = functionIn;更改爲strcpy(newNode->function,functionIn)

  3. char * fgets (char * str, int num, FILE * stream);如果不成功(如果在嘗試讀取字符時遇到文件結尾),它將返回NULL(不是EOF)。

是一些提示。還有很多其他的錯誤。您可能需要再次閱讀基本的C指針概念。

3

這裏:

(*newNode).function = functionIn; 

需要strcpy functionIn到(*newNode).function,你不能簡單地分配給它。此外,在這條線:

while(fgets(tempLine, 128, fileIn) != EOF) 

fgets不出錯返回EOF但NULL,所以你需要做的:

while (fgets(tempLine, 128, fileIn)) 

,並在這條線:

LinkedListNode currNode = (*listIn).head; 

head是指針,需要修復currNone的類型:

LinkedListNode *currNode = listIn->head; 

最後,你需要改變你的初始化函數:

void initLinkedList(Linkedlist **listIn) { 
    *listIn = (Linkedlist *)malloc(sizeof(Linkedlist)); 
    (*listIn)->head = NULL; 
} 

和呼叫:

initLinkedList(&list1); 
0
#include<iostream> 
#include<conio.h> 
#include<string.h> 
using namespace std; 
struct node 
{ 
    int itemno; 
    node *next; 
}; 
node *temp=NULL,*top=NULL; 
int e; 

void push() 
{ 
    temp=new node; 
    temp->next=NULL; 
    if(temp==NULL) 
    { 

    cout<<"stack overflow"; 
    return; 
} 

    cout<<"enter the itemno"<<endl; 
    cin>>temp->itemno; 
    //temp->itemno=e; 
    if(top==NULL) 
    { 
     top=temp; 
} 
    else 
    { 
     top=temp->next; 
     top=temp; 

    } 
} 
void pop() 
{ 
    if(top==NULL) 

     cout<<"stack underflow"; 


    else 
    { 
     top=temp; 
      cout<<temp->itemno; 
     top=top->next; 


    } 
     delete temp; 
} 
void display() 
{ 
    if(top==NULL) 
    { 

    cout<<"stack underflow"; 
    return; 
} 
    else 
    { 
     temp=top; 
     while(temp!=NULL) 
     { 
      cout<<temp->itemno; 
      cout<<endl; 
      temp=temp->next; 
     } 
    } 
} 
int main() 
{ char choice1; 
    int choice; 
    while(1) 
    { 
     cout<<"menu"<<endl; 
     cout<<"1.push"<<endl; 
     cout<<"2.pop"<<endl; 
     cout<<"e.displAY"<<endl; 
     cout<<"4.exit"<<endl; 
     cout<<"enter your choice"<<endl; 
     cin>>choice; 
     switch(choice) 
     { 
      case 1:{ 
       do 
       { push(); 
       cout<<"enter y to add or n to cancel"<<endl; 
       cin>>choice1; 


       }while(choice1=='y'); 


      break;} 
      case 2:{ 
       do 
       { 
        cout<<"enter y to delete or n to cancel"<<endl; 
        cin>>choice1; 
        if(choice1=='y') 
        pop(); 
       }while(choice1=='y'); 


      break;} 
      case 3:display(); 
      break; 
      case 4:return 0; 
      default:break; 

     } 

    } 
     getch(); 
     return 0; 


} can anybody point out the mistake in this.