[英]input in C program
我編寫了生成單項式和多項式並打印單項式和多項式的程序。 數據從鍵盤輸入。 例如,首先輸入數據組3的數量,然后輸入數據:1,3,2,4,3,6,3,4,2(每個組有3個元素)。 我需要輸出單項式Y ^ {1} {2,3} Y ^ {4} {3,6} Y ^ {3} _ {4,2}。 我的程序可以工作。 但是輸出不正確。 我認為該程序的問題在以下部分中。 我認為在以下方面scanf不好。 還有其他更好的輸入法來解決此問題嗎? 整個程序位於http://hi.baidu.com/lijr03/blog/item/51e17b0c63614bc863d98629.html
monomial create_monomial(int number) /* create a monomial */
{
monomial m,s;
monomial p;
int i;
printf("Please input the parameters (for example, 2, 2, 3 denotes the monomial P^{2}_{2,3}). The first subscripts i's of P's should be in increase order.");
m=(monomial)malloc(sizeof(monomial_node));
m->head=m->tail=(monomial)malloc(sizeof(monomial_node));
if(m->head==NULL)
{
return NULL;
}
m->head->next=m->tail;
m->tail->next=NULL;
p=(monomial)malloc(sizeof(monomial_node));
m->head->next=p;
p->next=m->tail;
scanf("%d", &((p->y).l));
scanf("%d", &((p->y).i));
scanf("%d", &((p->y).k));
if(number > 1)
{
for(i=0;i<number-1;i++)
{
s=(monomial)malloc(sizeof(monomial_node));
scanf("%d", &((s->y).l));
scanf("%d", &((s->y).i));
scanf("%d", &((s->y).k));
s->next=p->next; /* insert the node a */
p->next=s;
free(s);
}
}
return m;
}
free(s)
意味着您正在破壞剛剛創建的單項式。 您在指針上方創建的指針(從p
)意味着您在處理m
時將指向潛在的內存無效位。
scanf
是一個不錯的選擇,但它可能有些特殊。 我認為在這種情況下,您需要scanf格式,例如“%d,%d,%d”。 但是,最好的辦法是編寫一個小的簡單C程序,該程序僅輸入數據並進行試驗。 看起來像
int main(){
int x, y, z ;
scanf("%d,%d,%d", &x, &y, &z);
printf("%d,%d,%d\n", x,y,z);
return 0;
}
工作完成后,使真正的程序正常工作應該很簡單。
由於您尚未顯示錯誤的輸出,因此我只能對可能的問題進行准確的猜測,除了錯誤的scanf()
調用和free
調用之外,該調用會刪除您的其他已分配節點列表中,您有head
和tail
“空”節點。 因此,當遍歷鏈表時,您需要考慮head
節點和tail
節點為空,否則,由於這些節點未初始化,因此您將獲得一些奇數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.