我一直在尝试修复编译此程序时遇到的几个错误,但似乎无法找到任何解决方案。这些是实际代码后面出现的以下错误。大多数错误都是“一元*”问题,尽管我认为这是使用它的正确方法。如果有人能指出我正确的方向,那将非常有帮助。
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 :(得分: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);
答案 1 :(得分:1)
struct LinkedListNode* next
- &gt;缺少分号。
(*newNode).function = functionIn;
更改为strcpy(newNode->function,functionIn)
。
char * fgets ( char * str, int num, FILE * stream );
如果不成功(如果在尝试阅读字符时遇到文件结尾),则会返回NULL
(不是EOF)。
是一些提示。还有很多其他错误。您可能希望再次阅读基本的C指针概念。
答案 2 :(得分: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.