任何人都可以帮我解决以下c程序吗?这只是我在c中的第二个程序,所以我不知道我在做什么。
我正在尝试在c中创建一个程序来读取文件“input.txt”,并根据学生正确答案的百分比给出学生的星号数学分数
我想出的就是无限循环 的
+:*
- :*
* 的:*
/:*
input.txt类似于下面的
1 学生人数
Karla 学生姓名
8 10 加成分由8/10决定
50 80 扣除分数由50/80决定
30 60 乘法得分由30/60决定
2 5 分数得分由2/5决定
具有所需的
输出卡拉
+:* * * * * * * *
- :* * * * * *
*:* * * * *
/:* * * *
我的代码
int num;
char name;
int sum;
int cur;
int i;
int avg;
//call file
FILE*ifp=fopen("input.txt","r");
fscanf(ifp,"%d",&num);
for (i=0;i=num;i++){
fscanf(ifp,"%c",&name);
printf("%c",&name);
for(sum=0;sum<=4;sum++){
fscanf(ifp,"%d",&cur);
scanf(cur,"%d %d")
avg=%d/%d;
if (sum==1)
printf("+:");
else if (sum==2)
printf("-:");
else if (sum==3)
printf("*:");
else if (sum==4)
printf("/:");
if (avg==1)
printf("**********\n");
else if (avg>=.9)
printf("*********\n");
else if (avg>=.8)
printf("********\n");
else if (avg>=.7)
printf("*******\n");
else if (avg>=.6)
printf("******\n");
else if (avg>=.5)
printf("*****\n");
else if (avg>=.4)
printf("****\n");
else if (avg>=.3)
printf("***\n");
else if (avg>=.2)
printf("**\n");
else if (avg>=.1)
printf("*\n");
else
printf("\n");
}
}
//close file
fclose(ifp);
return 0;
如果有人能帮助我,我会非常感激。
答案 0 :(得分:2)
你的无限循环是因为你的外循环条件:
将for (i=0;i=num;i++)
更改为for (i=0;i<num;i++)
实际上,你只是每次都将我分配给num,因此是无限循环。
编辑: 我还应该指出你的行上有语法错误
scanf(cur,"%d %d")
avg=%d/%d;
并且您的avg
变量被声明为int,因此您将执行整数除法,这可能不会按预期执行;也就是说,你只会得到整数,所以你后来的条件将基本上没有意义。您应该将其设置为float或double并将其中一个操作数转换为浮点
答案 1 :(得分:0)
考虑以下For Loop:
for(i = 0, i < 10; i++)
{
DoSomething();
}
执行的顺序是:
在你的情况下,你实际上是在为i分配num,而不是检查我是否等于num。因为C将0视为“False”而将其他任何内容视为“True”,并且因为i = 10的“结果”为10(参见sidebar1),计算机将i = 10评估为“True”,因此循环继续
这在C中很容易出错,因为编译器不会对此发出警告。像Lint这样的静态分析工具会,但这是另一个故事。
在结论中,您可能希望“i = num”为“i&lt; num”或“i&lt; = num”或其他一些条件语句。
Sidebar1 此属性允许您链接分配,如a = b = c = 10.c = 10的结果为10,因此将其分配给b。 b = 10的结果是10,因此被分配给。