gpt4 book ai didi

c - C编程从文件中读取字符串char和int

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:51 25 4
gpt4 key购买 nike

student.dat file
----------------
Stu:1 abc ($) - 55 in following order (Stu: %d %s (%c) - %d)
Stu:2 pqr (^) - 82

我正在尝试读取此文件并将最高等级的详细信息保存在 c 编程的变量中。我的代码在下面但不完整!

int main(){

int num, grade;
char id, name[35];

FILE *fp = NULL;

fp = fopen("student.dat", "r");
if (fp != NULL) {

while ((fp != '\n') && (fp != EOF)) {

fscanf(fp, "%d %s %c %d", &num, name, id, &grade);
printf("Student Num: %d", num);
printf("Student Name: %s", name);
printf("Student id: %c", id);
printf("Student grade: %d", grade);

}

fclose(fp);
}else {
printf("Failed to open file\n");
}
}

最佳答案

在 C 中,您有 2 种主要方法来读取面向行的输入,然后解析为单独的值(实际上是 3 种,但我们现在将忽略沿着字符串向下移动一对指针)。

首选方式是使用面向行的输入函数,例如fgets 或 POSIX getline 将整行读入缓冲区,然后使用 sscanf 解析缓冲区,这比单次调用 fscanf 更灵活。

尽管如此,您似乎致力于在这里使用 fscanf。成功使用 fscanf 的关键是提供一个格式字符串,该字符串说明要读取的行中的所有字符,或者制作格式string 以利用各个格式说明符的属性来完成相同的事情(例如 %s (以及您的数字转换)将跳过前导空格,让您可以控制处理行尾否则将留在输入缓冲区中(文件或stdin,因此是后续调用fscanf时可用的下一个字符,如果处理不当,会给您的阅读程序带来麻烦。

另一个强制性步骤是验证所有指定的转换在每次读取期间都已成功完成。您可以通过检查 fscanfreturn 值来做到这一点,该值是匹配计数(发生的成功转换的计数)。如果您不检查,您就无法确信您的值实际上包含您认为它们包含的数据。

将它们放在一起,使用您的输入文件,并将要打开的文件名作为程序的第一个参数(如果没有给出文件名,则默认在 stdin 上读取),您可以做一些事情像下面这样:

#include <stdio.h>

int main (int argc, char **argv) {

int num =0, grade = 0, max = 0; /* initialize all variables */
char id = 0, name[35];
const char *fmt = " Stu:%d %s (%c) - %d"; /* given format string */
FILE *fp = NULL;

if (!(fp = argc > 1 ? fopen (argv[1], "r") : stdin)) {
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
/* read each line and validate 4 successful conversions */
while (fscanf (fp, fmt, &num, name, &id, &grade) == 4) {
if (grade > max) max = grade;
printf ("Student Num: %d Name: %-12s id: %c grade: %d\n",
num, name, id, grade);
}
printf ("\n highest grade : %d\n\n", max);

if (fp != stdin) fclose (fp);

return 0;
}

示例使用/输出

$ ./bin/stdntread <dat/stdntread.dat
Student Num: 1 Name: abc id: $ grade: 55
Student Num: 2 Name: pqr id: ^ grade: 82

highest grade : 82

查看代码,尤其是对格式说明符 的细微调整,如果您有任何其他问题,请告诉我。

关于c - C编程从文件中读取字符串char和int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38800099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com