簡體   English   中英

在C程序中輸入

[英]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調用之外,該調用會刪除您的其他已分配節點列表中,您有headtail “空”節點。 因此,當遍歷鏈表時,您需要考慮head節點和tail節點為空,否則,由於這些節點未初始化,因此您將獲得一些奇數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM