大家好!我得到了国家的数据列表和表中男性和女性的登记人数,我的任务是读入并按降序对总和进行排序。
阅读时没有问题,但我可能会猜到排序方面的问题。
在输出中,我只有2个国家而不是158.
这是我的代码
MPI_Type_commit()
返回此输出
int count = 2;
int array_of_blocklengths[] = { 1, 1 };
MPI_Aint array_of_displacements[] = { offsetof( foo, value ),
offsetof( foo, rank ) };
MPI_Datatype array_of_types[] = { MPI_FLOAT, MPI_CHAR };
MPI_Datatype tmp_type, my_mpi_type;
MPI_Aint lb, extent;
MPI_Type_create_struct( count, array_of_blocklengths, array_of_displacements,
array_of_types, &tmp_type );
MPI_Type_get_extent( tmp_type, &lb, &extent );
MPI_Type_create_resized( tmp_type, lb, extent, &my_mpi_type );
MPI_Type_commit( &my_mpi_type );
你可以帮忙吗?
提前谢谢!
答案 0 :(得分:0)
你的代码printList(curr);
实际上打印了curr
所指向的位置,并打印了它之后的所有下一个元素,但curr
本身并未指向列表的头部。并且printList(first);
已经打印了排序列表。
答案 1 :(得分:0)
您要查找的输出有点不清楚。除了printf语句之外,对printList
的最后两次调用(first
)和(curr
)之间没有任何内容。如果您打算在打印curr
时不打算只有2行,那么您需要curr
指向感兴趣的起始节点。或者如在另一个答案中所提到的,你可以将它们都设置为first
并且出于某种原因而逃避我的情况,连续两次打印列表类似于:
China 47803801 52828124 100631925
India 38383177 51078616 89461793
USA 12008749 12423185 24431934
Vietnam 4827551 5111768 9939319
Yemen 466693 988523 1455216
Zambia 183200 225771 408971
new
China 47803801 52828124 100631925
India 38383177 51078616 89461793
USA 12008749 12423185 24431934
Vietnam 4827551 5111768 9939319
Yemen 466693 988523 1455216
Zambia 183200 225771 408971
您的阅读循环存在问题,迟早会让您感到困惑。您需要查看Why is “while ( !feof (file) )” always wrong?通过快速更改,您可以轻松地使用for循环进行阅读,例如for(;;) {
然后简单地在你到达数据末尾时中断:
for (;;) {
person_count *newNode = calloc(1, sizeof(person_count));
if (fscanf(infile, "%s %ld %ld", newNode->country,
&newNode->females, &newNode->males) != 3)
break;
newNode->link = NULL;
...
请在printList (first)
之后提供有关您希望打印的内容的其他说明,并且我们乐意为您提供进一步的帮助。