Iced_piggy
Iced_piggy
采纳率0%
2020-03-23 23:09

c++为什么cin无法读入,直接被掠过?求大佬解答

本人蒟蒻一枚,这是我自己写的任务程序,用的集成开发环境是DEV C++

问题就是此代码中的cin为什么被掠过?

不说了,上代码:

#include<ctime>
#include<cstdio>
#include<conio.h>
#include<iostream>
#include<Windows.h>

using namespace std;

int complete_days,n,complete_tasks;
string saying;//谚语 
bool exist[101],is_normal=1;
//任务是否存在。是否正常模式 
string task[101];//任务 
int get_today()//得到是星期几 
{
    time_t t=time(0);
    char tmp[64];
    string a="";
    strftime(tmp,sizeof(tmp),"%A",localtime(&t));
    int len=strlen(tmp);
    for(int i=0;i<len;i++)
        a+=tmp[i];
    if(a=="Monday")
        return 1;
    else if(a=="Tuesday")
        return 2;
    else if(a=="Wednesday")
        return 3;
    else if(a=="Thursday")
        return 4;
    else
        return 5;
    return 0;
}
void normal_mode()//正常模式 
{
    system("cls");
    printf("已完成%d个任务中的%d个,百分比为%.2f%%,已坚持%d天\n\n",n,complete_tasks,(float)complete_tasks/(float)n*1e2,complete_days);
    if(saying!="")
        cout<<saying<<"\n\n";
    if(n==complete_tasks)
        printf("你已完成今天的全部任务!\n");
    else
        for(int i=1;i<=n;i++)
            if(exist[i])
            {
                printf("%d  ",i);
                cout<<task[i]<<"\n";
            }
    printf("\n注:按Q退出,按W完成任务\n如要完成任务,预先在文件中输入\n");
    return;
}
void day_c()//一天的任务完成 
{
    complete_days++;
    freopen("总.txt","w",stdout);
    printf("%d\n",complete_days);
    cout<<saying;
    fclose(stdout);
    return;
}
void delete_task()
{
    int tmp;
    cin>>tmp;//错误处 
    system("cls");
    if(tmp>n||tmp<1||exist[tmp]==0)
        printf("错误!");
    else
    {
        complete_tasks++;
        exist[tmp]=0;
        printf("成功!");
        if(n==complete_tasks)
            day_c();
    }
    Sleep(3000);
    return;
}
void init()//初始化
{
    freopen("总.txt","r",stdin);
    scanf("%d",&complete_days);
    cin>>saying;
    fclose(stdin);
    switch(get_today())
    {
        case 1:
            freopen("1.txt","r",stdin);
            break;
        case 2:
            freopen("2.txt","r",stdin);
            break;
        case 3:
            freopen("3.txt","r",stdin);
            break;
        case 4:
            freopen("4.txt","r",stdin);
            break;
        case 5:
            freopen("5.txt","r",stdin);
            break;
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>task[i];
        exist[i]=1; 
    }   
    fclose(stdin);
}
int main()
{
    init();//初始化
    normal_mode();//正常模式
    while(1)
    {
        switch(getch())//从键盘按键得到字符
        {
            case 'q':
            case 'Q'://直接暴力退出
                return 0;
                break;
            case 'W':
            case 'w'://完成(删除)任务
                if(n!=complete_tasks)//如果有任务没完成
                {
                    delete_task();//完成任务的函数
                    is_normal=0;
                }
                break;
        }
        if(!is_normal)
        {
            normal_mode();
            is_normal=1;
        }
    }
    return 0;
}

我不知道是getch()的使用是错误的还是其他原因,反正一按‘W’,“错误”就自动出现,压根输入不了
恳求大佬回答

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答