程序输入多组数据时发生错误

问题遇到的现象和发生背景

猴子第一天摘下若干桃子,当即吃了一半,还觉不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天天早上都吃了前一天剩下的一半零一个。到第n(n<=20)天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。
输入格式:
测试数据有多组,处理到文件尾。每组输入天数n。

输出格式:
每组输出第一天摘的桃子数(结果保证在int型范围)。
输入样例:
在这里给出一组输入。例如:

5
10
18
输出样例:
在这里给出相应的输出。例如:

46
1534
393214

问题相关代码,请勿粘贴截图
int n,sum=1,i;
while(scanf("%d",&n) != EOF)//这是我认为的输入多组数据的方法
{
while(n)
{
sum=(sum+1)*2;
n--;
}
if(n==0)
   {
    i=sum/2-1;
   printf("%d\n",i);
   }
 }
运行结果及报错内容

5
10
18
结果
46
49150
-2
以上是输入和运行结果

我的解答思路和尝试过的方法

用这串代码可以解决输入一组数据并运行正确结果
但是输入一组数据时就不行了

我想要达到的结果

46
1534
393214

参考代码:

#include <stdio.h>
int main()
{
    int day,i,s;    /*定义 day、i、s 3 个变董为基本整型*/
    while(scanf("%d",&day) != EOF){
        s = 1;
        for(i=1;i<day;i++)//因为到第day天还剩一个,所以循环day次
        {
            s=(s+1)*2;//倒序求出每天的数量
        }
        printf("%d\n",s);    /* 输出桃子的总数*/
    }
    return 0;
}

输出为:
46
1534
393214

img

sum只初始化了一次
你应该在每次循环开始都初始化,否则它越变越大,那能对吗

#include<stdio.h>
int main()
{
    int peach=1,n,i;
    scanf("%d", &n);
    for(i=1; i<n; i++){
        peach=(peach+1)*2;  //从最后一天反向计算
    }
        printf("%d\n", peach);
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632