在C语言编程中,负数也为真

表达式的真假是看零和非零,对于负数也是真





  
  1. typedef struct StudentInfo ElementType;
  2. struct StudentInfo
  3. {
  4. char ID[ 11];
  5. char *name;
  6. double score;
  7. }StuInfo[ 12]=
  8. {
  9. { "0800301105", "JACK", 95},
  10. { "0800201505", "LUN", 85},
  11. { "0400820115", "MARY", 75.05},
  12. { "0400850122", "KATE", 78.9},
  13. { "0500201011", "LILI", 88},
  14. { "0800401105", "JACK", 96},
  15. { "0600830105", "JAN", 98.4},
  16. { "0952520012", "SAM", 75},
  17. { "9721000045", "OSCAR", 64},
  18. { "0700301105", "JACK", 97},
  19. { "0458003312", "ZOE", 68.9},
  20. { "0400830211", "BOBI", 87.6}
  21. };
  22. void
  23. InsertionSort ( ElementType A[ ], int N ) //该函数是插入排序来比较两个结构体
  24. {
  25. int j, P,t;
  26. ElementType Tmp;
  27. for( P = 1; P < N; P++ )
  28. {
  29. Tmp = A[ P ];
  30. for( j = P; (j > 0) && strcmp(A[ j - 1 ].ID , Tmp.ID); j-- )
  31. A[ j ] = A[ j - 1 ];
  32. A[ j ] = Tmp;
  33. }
  34. }



对于这一句strcmp(A[ j - 1 ].ID , Tmp.ID)
我原本的意思是说如果比较的结果是前面的结构体小于后面的,则条件为假
但是事实是,负数其实也是真的   所以这里的代码应该改成(strcmp(A[ j - 1 ].ID , Tmp.ID))>0