- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
排序的打印不正确,排序可能是错误的。我也不确定如何计算每个字符串中的平均成绩。这是示例输出:
Original:
+-------------------------+--------------+------+------+---------+---------+-------+-----+
| Student Name|Identification|Exam 1|Exam 2|Project 1|Project 1|Average|Grade|
+-------------------------+--------------+------+------+---------+---------+-------+-----+
| Holtkamp, Norman| N21102485| 83| 61| 62| 78| 71.00| C|
| Bellomy, Shavonda| N94185259| 74| 96| 80| 98| 87.00| B|
| Clutter, Loris| N68760306| 83| 68| 93| 70| 78.50| C|
| Rountree, Edythe| N76813896| 98| 91| 90| 81| 90.00| A|
| Waldeck, Marylee| N44293872| 88| 100| 70| 87| 86.25| B|
+-------------------------+--------------+------+------+---------+---------+-------+-----+
Sorted:
+-----+-------------------------+--------------+------+------+---------+---------+-------+-----+
|Index| Student Name|Identification|Exam 1|Exam 2|Project 1|Project 1|Average|Grade|
+-----+-------------------------+--------------+------+------+---------+---------+-------+-----+
| 1 | Rountree, Edythe| N76813896| 98| 91| 90| 81| 90.00| A|
| 2 | Bellomy, Shavonda| N94185259| 74| 96| 80| 98| 87.00| B|
| 3 | Waldeck, Marylee| N44293872| 88| 100| 70| 87| 86.25| B|
| 4 | Clutter, Loris| N68760306| 83| 68| 93| 70| 78.50| C|
| 5 | Holtkamp, Norman| N21102485| 83| 61| 62| 78| 71.00| C|
+-----+-------------------------+--------------+------+------+---------+---------+-------+-----+
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
//Struct groups each line in the file
struct gradesRecord
{
int iIndex; // index on the file
char cStudentName[26]; // student name field
char iStudentINDnum[9]; // 'Student id ' field
int iExamGrouped[2]; // 'Exam 1'..'Exam 2' fields
int iProjectGrouped[2];
float fAverage;
char cStudentGD; // 'Grade' field
};
void printUnsortedStringFromFile(int amount, struct gradesRecord A[]);
void printSortedStringFromFile(int amount, struct gradesRecord A[]);
void flushScanf();
int main()
{
FILE* spData = fopen("records.ssv", "r");
int ch, number_of_lines = 0;
do
{
ch = fgetc(spData);
if (ch == '\n')
number_of_lines++;
} while (ch != EOF);
if (ch != '\n' && number_of_lines != 0)
number_of_lines++;
fclose(spData);
printf("There are %d lines in file records.ssv . \n", number_of_lines);
int amount = number_of_lines;
struct gradesRecord A[amount];
printUnsortedStringFromFile(amount, A );
printSortedStringFromFile(amount, A );
//flushScanf();
return 0;
}
/*
* Function Name: printUnsortedStringFromFile
*
* Input Parameters: takes array A
*
* Description: This fuction prints the original list that was unsorted in grades.csv
*
* Return Value: void
*/
void printUnsortedStringFromFile(int amount, struct gradesRecord A[amount])
{
FILE *spData;
spData = fopen("records.ssv", "r");
if(spData == NULL)
{
fprintf(stderr, "Error opening the file records.ssv.\n");
exit(1);
}
printf("+---------------------+--------------+------+------+---------+---------+-----+\n");
printf("| Student Name|Identification|Exam 1|Exam 2|Project 1|Project 2|Grade|\n");
printf("+---------------------+--------------+------+------+---------+---------+-----+\n");
char sLine[amount]; //local string to read one row
int j = 0; //storage index
while((fgets(sLine, amount, spData)) != NULL)
{
sscanf(sLine, "%20[^;] ; %9[^;] ; %5d ; %5d ; %5d ; %5d ; %c",
A[j].cStudentName, A[j].iStudentINDnum, &(A[j].iExamGrouped[0]), &(A[j].iExamGrouped[1]),
&(A[j].iProjectGrouped[0]), &(A[j].iProjectGrouped[1]), &(A[j].cStudentGD));
if(strcmp(A[j].cStudentName, " ")> 0){
printf("| %20s| %9s| %5d| %5d| %5d| %5d| %c| \n",
A[j].cStudentName, A[j].iStudentINDnum, A[j].iExamGrouped[0], A[j].iExamGrouped[1],
A[j].iProjectGrouped[0], A[j].iProjectGrouped[1], A[j].cStudentGD);
}
j++; // next row
}
printf("+---------------------+--------------+------+------+---------+---------+-----+\n");
if (fclose(spData) == EOF)
{
fprintf(stderr, "Error closing the file records.ssv. \n");
exit(2);
}
}
/*
* Function Name: printSortedStringFromFile
*
* Input Parameters: takes int amount, struct gradesRecord A
*
* Description: This function prints the sorted version of the file grades.csv omitting
* the exam values and giving each string a index number
*
* Return Value: void
*/
void printSortedStringFromFile(int amount, struct gradesRecord A[amount])
{
FILE *spData;
spData = fopen("records.ssv", "r");
if(spData == NULL)
{
fprintf(stderr, "Error opening the file grades.csv.\n");
exit(1);
}
char sLine[amount];
int iLine = 0, iRow;
int x;
struct gradesRecord grRow;
while((fgets(sLine, amount, spData)) != NULL)
{
// extract one Row and store it into grRow
sscanf(sLine, "%20[^;] ; %9[^;] ; %5d ; %5d ; %5d ; %5d ; %2.2f ; %c",
grRow.cStudentName, grRow.iStudentINDnum, &(grRow.iExamGrouped[0]), &(grRow.iExamGrouped[1]),
&(grRow.iProjectGrouped[0]), &(grRow.iProjectGrouped[1]), &(grRow.fAverage), &(grRow.cStudentGD));
// keep the line index of that row
grRow.iIndex = iLine;
// target loop = Selection sort algorithm
for (iRow = 0; iRow < iLine - 1; iRow++){
for(x = iRow + 1; x < iLine; x++){
if (A[iRow].cStudentGD < A[x].cStudentGD) {
struct gradesRecord tmp = A[iRow];
A[iRow] = A[x];
A[x] = tmp;
}
}
}
int j = 0;
printf("+-----+---------------------+--------------+------+------+---------+---------+-------+-----+\n");
printf("|Index| Student Name|Identification|Exam 1|Exam 2|Project 1|Project 2|Average|Grade|\n");
printf("+-----+---------------------+--------------+------+------+---------+---------+-------+-----+\n");
int index;
while (j < amount - 1)
{
index = j+1;
printf("| %4d| %20s| %9s| %5d| %5d| %5d| %5d| %2.2f| %c| \n",
index, A[j].cStudentName, A[j].iStudentINDnum, A[j].iExamGrouped[0], A[j].iExamGrouped[1],
A[j].iProjectGrouped[0], A[j].iProjectGrouped[1], A[j].fAverage, A[j].cStudentGD);
j++;
}
printf("+----+---------------------+--------------+------+------+---------+---------+-----+\n");
if (fclose(spData) == EOF)
{
fprintf(stderr, "Error closing the file records.ssv. \n");
exit(2);
}
}
}
这里是“records.ssv”的信息
Panzer, Lelia;N58288536;89;82;91;65;BBasler, Jennifer;N42495906;74;71;87;91;BLeaton, Cindi;N66735910;67;93;76;79;CBishop, Carolyne;N85576519;86;94;92;69;BLucey, Callie;N55890919;86;84;88;87;BTweed, Mirta;N94974972;62;95;85;92;BFontenot, Rosette;N44585447;98;62;74;74;CHoltkamp, Norman;N21102485;83;61;62;78;CBellomy, Shavonda;N94185259;74;96;80;98;BClutter, Loris;N68760306;83;68;93;70;CRountree, Edythe;N76813896;98;91;90;81;AWaldeck, Marylee;N44293872;88;100;70;87;BPutnam, Tuyet;N82771281;69;99;68;67;CMichaels, Arnette;N33948917;86;65;99;64;CStrawder, Wendolyn;N05586646;86;64;80;97;BMontufar, Melvin;N36545740;80;61;74;92;CFey, Letha;N61908241;73;89;71;68;CDeluna, Vaughn;N74322300;94;69;67;60;CWever, Marguerita;N37176367;95;92;95;70;BBuckingham, Lena;N87562246;95;64;89;71;CFridley, Verona;N53223806;67;83;71;61;CEbarb, Gladis;N66138130;89;70;87;90;BTichenor, Monika;N40314334;88;62;62;100;CDoran, Novella;N24182986;78;62;65;71;DRelyea, Mazie;N64652923;89;95;72;76;BKendall, Roma;N22064372;91;84;72;88;BBrannock, Henriette;N19795353;67;92;63;90;CLaine, Clint;N83838870;88;83;82;77;BReichenbach, Sharleen;N02253867;81;96;91;73;BEvers, Hanna;N05833153;75;79;75;98;BRegina, Amal;N52372967;95;73;73;89;BLightle, Desmond;N81006603;75;66;61;71;DYeoman, In;N30566266;89;99;98;89;AGarling, Nereida;N05192538;89;92;74;99;BHanna, Assunta;N39624931;91;80;72;80;BDanko, Mignon;N47365488;79;67;86;65;CUrich, Virgen;N57019166;70;82;72;88;CCzapla, Ermelinda;N38233556;93;83;60;87;BHapp, Mina;N46726472;84;98;60;66;CSudderth, Deloris;N88538002;86;71;82;82;BPalermo, Kenna;N44857147;72;69;83;75;CWiedemann, Usha;N29831009;86;78;89;81;BSaeed, Ruth;N47933985;78;62;99;99;BBurell, Colin;N75299461;77;85;99;99;AHeckert, Edie;N58264115;92;96;96;89;APolley, Denver;N77063394;99;95;65;95;BWeaver, Blanch;N59717716;66;80;89;80;CKibble, Glinda;N68212959;94;95;66;94;BKirker, Willis;N17878125;71;60;87;79;CLivesay, Arie;N91011529;89;60;60;84;C
最佳答案
在 printUnsortedStringFromFile()
和 printSortedStringFromFile()
中你有
sscanf(sLine, "%20[^;]…
要读入 cStudentName
,但是 20
个字符对于 Reichenbach, Sharleen
来说不够。由于您定义了 char cStudentName[26];
,因此 25
的最大字段宽度就足够了。
在 printSortedStringFromFile()
中有
sscanf(sLine, "… %2.2f ; …
在grRow.fAverage
中读取,但是在records.ssv
中没有这个字段,而A[j].fAverage
是从未初始化。
您说的排序可能是错误的是对的。这是因为在排序之前没有设置iLine
:
iLine = amount-1; // You know that your 'amount' is 1 too high, don't you?
关于c - 如何使用 C 中的结构和选择排序按字符串对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924100/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!