yuAriellexi 2018-08-10 07:58 采纳率: 100%
浏览 1265
已采纳

PAT wifi密码1076题 输入问题

第一次代码如下

 #include <iostream>
using std::cin;
using std::cout;
using std::endl;

int main()
{
    int N;
    cin >> N;
    char choice;//A or B or C or D
    char answer;//T or F
    int count = 0;
    int flag[100] = {0};
    while (N--)
    {
        for (int i = 0; i < 4; i++)
        {
            scanf("%c-%c", &choice, &answer);
            if (answer == 'T')
            {
                flag[count] = choice - 'A' + 1;//转化1234
                count++;
            }
        }
    }

    for (int i = 0; i < count; i++)
    {
        cout << flag[i];
    }
    return 0;
}

输入有问题,只输入四次就终止,结果都是错误的

#include <iostream>
#include <stdio.h>
using std::cin;
using std::cout;
using std::endl;

int main()
{
    int N;
    cin >> N;
    char choice;//A or B or C or D
    char answer;//T or F
    int count = 0;
    int flag[100] = {0};
    N = 4 * N;
    while (N--)
    {

            scanf("%c-%c", &choice, &answer);
            if (answer == 'T')
            {
                flag[count] = choice - 'A' + 1;
                count++;
            }
    }

    for (int i = 0; i < count; i++)
    {
        cout << flag[i];
    }
    return 0;
}

还是同样的问题:
输入如下
8
A-T B-F C-F D-F
C-T B-F A-F D-F
B-T A-F C-F D-F
B-F D-T A-F D-F

这样输入,没有结果
请不要给我复制一些正确答案,我看过了,只是不懂为什么我的输入方法有问题,错在哪儿?感谢!

  • 写回答

7条回答 默认 最新

  • H-PAI 2018-08-13 01:51
    关注

    #include
    using std::cin;
    using std::cout;
    using std::endl;

    int main()
    {
    int N;
    cin >> N;
    char choice;//A or B or C or D
    char answer;//T or F
    int count = 0;
    int flag[100] = {0};
    N = 4 * N;
    while (N--)
    {

            scanf("%c-%c", &choice, &answer);
            if (answer == 'T')
            {
                flag[count] = choice - 'A' + 1;
                count++;
            }
    }
    
    for (int i = 0; i < count; i++)
    {
        cout << flag[i];
    }
    return 0;
    

    }

    
    

    这是博主的代码!!
    只需要修改一行代码就可以正确运行了,代码地19行的scanf("%c-%c", &choice, &answer); 这句改为scanf(**"%c-%c "**, &choice, &answer)
    注意scanf引里面需要加上一个空格。
    愿意解释:在输入的时候给定的输入格式是:
    8
    A-T B-F C-F D-F
    这里四个输入中间是由空格分割开的,scanf在读取的时候若没有接收到回车就会把输入的内容都放在缓存区里,当接受回车之后从缓存区里读数据,按照博主的读取格式首“A”会放入choice,之后“-”不会读取,之后“T”会放入answer, 紧接着缓存里面存的并不是“B”,而是“ ”(空格),以下一次choice里面存的就是“ “(空格)这样一来后面就全乱套了。
    下面贴出我微微改过的代码
    #include
    #include
    using std::cin;
    using std::cout;
    using std::endl;

    int main()
    {
    int N;
    cin >> N;
    //getchar();
    char choice;//A or B or C or D
    char answer;//T or F
    int count = 0;
    int flag[100] = {0};
    N = 4 * N;
    while (N--)
    {
    scanf("%c-%c ", &choice, &answer); //注意这里加了一个空格
    if (answer == 'T')
    {
    flag[count] = choice - 'A' + 1;
    count++;
    }
    }

    for (int i = 0; i < count; i++)
    {
        cout << flag[i];
    }
    return 0;
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog