c - 为什么这个程序的结果总是零?

标签 c

<分区>

我正在尝试编写一个简单的程序来接收最多 30 名学生的分数、姓名和 ID,并打印他们的平均分数。我想知道为什么程序的结果总是零。
如果有人能给我提示,我将不胜感激。
这是代码:

#include <stdio.h>

struct student{
    char name[30];
    int mark;
    int ID;

} s[30];

int main() {
    int n, i=0, sum=0;
    float average;
    /* printf("enter the number of students: "); */
    scanf("%d", &n);
    /* printf("enter their information: "); */

    for(i=0; i<n; i++)
        scanf("%s,%d,%d",s[i].name,&s[i].mark,&s[i].ID);

    for(i=0; i<n; i++)
         sum+=s[i].mark;
    
    average=sum/(float)n ;
    printf("%.2f", average);
}

最佳答案

格式说明符 %s 表示要读取一个字符串,它正在这样做……包括您的逗号和后续字符。这是“贪心”。

然后 %d 就没有什么可以吸收的了,所以所有的整数都保持为零。

我建议你一次读一行,然后解析这些行。

或者,在this similar question上有一些建议.


当遇到这样的问题时,您应该尝试通过检查调试器中的变量值来缩小问题范围,或者甚至只是使用 printf,如下所示:

    printf("%s|%d|%d\n", s[i].name, s[i].mark, s[i].ID);

当我将其放入您的第一个循环并将以下输入传递给程序时:

2
A,2,3
B,4,5

the output is this :

A,2,3|0|0
B,4,5|0|0
0.00

…这清楚地表明解析是问题所在。

关于c - 为什么这个程序的结果总是零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64171079/

相关文章:

c - 在 C 中搜索 .txt 文件中的字符串?

c - 使用 ncurses 后的 printf()/puts()

c - 实现 Booth 算法时的位移位和类型转换问题

c - 为什么以下 C 程序片段会给出此输出?

c - 处理文件 - 二维字符串数组问题(C 语言)

CMake 通过 shell 脚本生成 C 头文件

c++ - 为什么 Visual Studio 不将无符号值显示为 int?

c - 通过串行端口发送整数并打印到 LCD

c - 使用 fork 的 C 程序中的错误文件描述符

c++ - 在 CentOS 7 和 GCC 5.2 中以编程方式从 C/C++ 分配 CPU 内核