c - 使用 scanf() 难以同时正确输入多个整数
问题描述
所以我有一个编码项目,我必须计算一个学生在一个有 4 个测验、2 个期中考试和 1 个期末考试的班级中的总成绩。测验和考试权重为 30%,期中考试权重为 40%。我只是帮助两件事:
- 我的代码不想在没有 4 个单独的输入数字 (79 80 0 0) 的情况下开始。
- 当进入代码的考试部分时,出于某种原因,它会绕过所需的用户输入并将其自动转换为测验编码中的第三个数字。我正在用c编程进行编码。
#include <stdio.h>
int main()
{
int testOne, testTwo;
float totTest, percTest, testPoint;
printf("Enter you test grades:\n");
scanf("%d%d\n",&testOne,&testTwo);
totTest=testOne+testTwo;
printf("Your total grade points is: %.1f\n", totTest);
testPoint=200;
percTest=(totTest*.40)/testPoint *100;
printf("Your percentage is %.1f%\n", percTest);
int quizOne, quizTwo, quizThree, quizFour;
float totQuiz, percQuiz, quizPoint;
printf("Enter you quiz grades:\n");
scanf("%d%d%d%d\n", &quizOne, &quizTwo, &quizThree, &quizFour);
totQuiz=quizOne+quizTwo+quizThree+quizFour;
printf("Your total quiz grade is %.1f\n", totQuiz);
quizPoint=400;
percQuiz=(totQuiz*.30)/quizPoint *100;
printf("Your quiz percentage is %.1f%\n", percQuiz);
int examOne, examPoint; <This is the code that automatically messes up>
float percExam, finGrade;
printf("Enter your exam grade\n");
scanf(" %d\n", &examOne);
examPoint=100;
percExam=(examOne*.30)/examPoint *100;
printf("Your final exam grade is %.1f\n", percExam);
finGrade=(percExam+percQuiz+percTest);
printf("Your overall grade is %.1f%\n", finGrade);
return 0;
}
解决方案
你的问题与你程序的逻辑无关,与计算成绩无关,一切都与:scanf
. scanf
在介绍 C 编程时,它同时是 C 库中看起来最有用,但实际上最无用的函数。
scanf
以下是在介绍性 C 编程中使用的三个简单规则:
仅使用以下四种输入格式之一:
"%d"
,"%s"
,"%f"
,"%lf"
. 如果您只是必须阅读单个字符,则可以添加第五个:(" %c"
但请确保始终使用该额外空间)。单独使用这些,一次一个,不要组合它们或添加任何其他字符。始终检查
scanf
. 如果它不返回 1,则打印一条错误消息并退出:if(scanf(...) != 1) {printf("input error!\n"); exit(1); }
如果您想做一些更奇特的事情,而您无法使用规则 1 所允许的有限数量的格式来完成,那么是时候学习如何使用比
scanf
.
特别是,不要尝试使用%d%d
. 也不要\n
在 scanf 格式语句中使用——它不会按照你的想法做,它可能会给你带来问题。
推荐阅读
- elasticsearch - Elasticsearch 滚动查询返回错误
- python - 我的代码在超过 15500 次迭代时突然停止编写
- amazon-web-services - 如何将 AWS EC2 负载均衡器添加到与我的静态前端相同的域
- julia - 具有邻接矩阵的 Dijkstra 算法
- php - 我想复制 $friendname=$_POST['friendname']; 当 if 语句有效并在此处回显时,值到下一页
- xamarin - 在 Xamarin Forms 中使用邮件服务时,我们如何获取 SmtpServer NetworkCredentials?
- ruby - 无法安装 vagrant-hostsupdater
- reactjs - 在 cPanel 上部署 React 应用程序后,Web 目录可见
- python - .replace() 不替换元素
- javascript - WebRTC onicecandidate 永远不会在 chrome 中触发