C 从包含整数的单行计算包数
我试图以字符串的形式读入一个数字列表,并计算应该有多少个包。每个包装最多有50个。例如,C 从包含整数的单行计算包数,c,while-loop,scanf,C,While Loop,Scanf,我试图以字符串的形式读入一个数字列表,并计算应该有多少个包。每个包装最多有50个。例如,“25-1”的输出应该是2,但我得到1 你能看一下我的密码吗 int main(void) { int input = 0; int diff = 50; int output = 0; printf("Input: \n"); do { scanf("%d", &input); if (input < diff) { diff -= input
“25-1”
的输出应该是2,但我得到1
你能看一下我的密码吗
int main(void) {
int input = 0;
int diff = 50;
int output = 0;
printf("Input: \n");
do {
scanf("%d", &input);
if (input < diff) {
diff -= input;
} else if (diff == input) {
diff = 50;
output++;
} else {
diff = 50 - input;
output++;
}
} while (input != -1);
printf("Output: %d", output);
return 0;
}
int main(无效){
int输入=0;
int-diff=50;
int输出=0;
printf(“输入:\n”);
做{
scanf(“%d”,输入(&I));
如果(输入<差异){
diff-=输入;
}else if(diff==输入){
差异=50;
输出++;
}否则{
差异=50-输入;
输出++;
}
}while(输入!=-1);
printf(“输出:%d”,输出);
返回0;
}
正如我在注释中所提到的,您在循环开始时读入一次输入
,并将其与循环结束时的-1
进行比较,因此-1
将得到与其他所有输入
值相同的处理
显而易见的选择是在两个不同的位置读取,一个在循环之前,一个在循环结束时,这样您将直接在循环条件之前获得一个新的输入值:
printf("Input: \n");
scanf("%d", &input);
while(input != -1) {
// Processing
scanf("%d", &input);
}
请注意,我还将循环切换为,而循环,而不是do。。。当
循环时,如果提供的输入仅包含-1
,则执行。。。而
仍会对其进行处理,导致输出错误
您也没有考虑到在循环结束时包可能不完整,这可以通过检查循环结束后是否有未计数的包来解决:
printf("Input: \n");
scanf("%d", &input);
while(input != -1) {
// Processing
scanf("%d", &input);
}
if(diff != 50) {
output++;
}
确保不要将“-1”用作已处理数据的一部分
还要看看你的算法
也许是这样的:
#include <stdio.h>
int main(void) {
int input = 0;
int load = 50;
int output = 0;
printf("Input: \n");
while (1) {
if (scanf("%d", &input) != 1 || input > 50)
{
// Illegal input
exit(1);
}
if (input == - 1)
{
// Done
break;
}
if (load + input > 50)
{
++output; // Take new package
load = 0; // make it empty
}
load += input; // Put into package
};
printf("Output: %d", output);
return 0;
}
#包括
内部主(空){
int输入=0;
内载=50;
int输出=0;
printf(“输入:\n”);
而(1){
如果(scanf(“%d”,&input)!=1 | | input>50)
{
//非法输入
出口(1);
}
如果(输入==-1)
{
//完成
打破
}
如果(加载+输入>50)
{
++output;//获取新包
load=0;//将其设为空
}
load+=input;//放入包中
};
printf(“输出:%d”,输出);
返回0;
}
在循环开始时读取输入,并在循环结束时将其与-1进行比较,因此-1的处理与其他值相同input@jsonkiller您没有考虑包的边界。如果你的输入是“26-1”,那么你需要3个包,因为一个包只能容纳50个,所以在输入26后,没有地方容纳下一个包。你的(固定的)算法仍然会说2。答案中提到的应用更改了吗?输入什么?不要删除这样的代码,这样会使您的问题及其答案无效