텍스트 파일에서 수학 표현식 세트 (x^2, sin x 등)를 취해 그래프에 그려주는 작은 프로그램을 작성하고 있습니다어떻게하면 링크드리스트의 멤버를 구조화 할 수 있습니까
typedef struct Expression
{
int r, g, b;
char* expression;
} Expression;
주 : 다음들은 구조체에 저장된 각 식을 읽은 선언 된 R, G, 그리고 B 변수 플롯 될 선의 색이며, 식 문자열로 저장되어있다.
내 연결리스트 노드는 다음과 같이 선언:
typedef struct LinkedListNode
{
struct Expression *expression;
struct LinkedListNode *next;
} LinkedListNode;
typedef struct LinkedList
{
LinkedListNode *head;
} LinkedList;
EOF 때까지 while 루프 실행에 나는 표정을 읽을 할 모든 (나는이 모든 것을 알고 잘 작동) :
Expression* expression = (Expression*)malloc(sizeof(Expression));
LinkedList* expressionList;
expressionList = createEmptyList();
while(!feof(readFile))
{
fscanf(readFile, "%d %d %d %[^\n]s", &r, &g, &b, expr);
fgetc(readFile);
expression -> r = r;
expression -> g = g;
expression -> b = b;
expression -> expression = expr;
insertNodeFront(expressionList, expression);
}
void insertNodeFront(LinkedList *inList, Expression *inExpression)
{
LinkedListNode *newNode;
newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
newNode -> expression = inExpression;
newNode -> next = inList -> head;
inList -> head = newNode;
}
내가 그것을 어디 특히이 줄을 생각 : 나는 문제가 발생 곳
는 이제 insertNodeFront 기능입니다 모든 연결리스트의 각 표현식 구성원이 여전히 원래 표현 구조체를 가리키는
newNode -> expression = inExpression;
때문에 그들은 모두 말 (분명 문제가)에서 동일한 값으로 끝날 것입니다, 그래서 내가가 있다고 가정 : 문제는있다 insertNodeFront 내에서 inExpression 포인터의 복사본을 만들지 만, 어떻게해야하는지 정확히 모르겠습니다. memcpy를 사용하는 모든 시도가 충돌을 일으켰습니다. (아마도 memcpy를 처음 사용하기 때문에 잘못된 것이 있습니다.) 당신은 포인터 inExpression
이후 newNode -> expression = inExpression;
를 할당 할 수 없습니다
어떤 조언이 도움이 될 것입니다, 감사
[while (! feof (f))'항상 틀립니다.] (https://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) –
문제가 생기면 그 대신에 무엇을 사용해야합니까? while (fgetc (f)! = EOF)? – Magikjak
@ user2978566 "나는 그걸로 아무런 문제가 없었습니다."- 당신이'fscanf'와'fgetc' *가 성공했다는 가정하에 행진하기 전에 결코 확인하지 않기 때문입니다. 의견에 제공된 [** 링크 **] (http://stackoverflow.com/a/5432517/1322972)는 왜 그것이 거의 항상 잘못된지를 설명합니다. – WhozCraig