亦行之 2024-03-08 16:25 采纳率: 34.5%
浏览 0
已结题

PAT乙级1076用scanf输入无法得出正确答案

img

img


#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int num[n];
    char id,result;
    for(int i=0;i<n;i++){
        for(int j=0;j<4;j++){
            scanf("%c-%c",&id,&result);
            if(result=='T'&&id=='A'){
                num[i]=1;
            
                //break;
            } 
            else if(result=='T'&&id=='B'){
                num[i]=2;
            
            //    break;
            }
            else if(result=='T'&&id=='C'){
                num[i]=3;
                
            //    break;
            }
            else if(result=='T'&&id=='D'){
                num[i]=4;
                
            //    break;
            }
            }
    }         
     for(int i=0;i<n;i++){
        printf("%d",num[i]);
    }     
        return 0;
}

我的代码在devc++上运行时,如果输入n为8,输入只能有四行,而按题目意思应该输入八行,这是为什么呢?我的代码无法得到正确输出又是为什么呢?

  • 写回答

1条回答 默认 最新

  • 关注

    亦行之 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    您的代码无法正确读取并处理输入数据,原因在于scanf("%c-%c",&id,&result);这行。当使用%c格式符时,它会读取空格、换行符等空白字符。因此,在读取每个选项时,它实际上跳过了换行符直接读取了下一行的第一个字符。

    解决方案:

    1. 为了正确读取每行的四个选项,您需要先读取多余的空白字符(包括换行符),这里可以使用getchar()函数。
    2. 修改scanf为更合适的读取方式,例如使用fgets配合sscanf来处理每一行。

    下面是修改后的代码示例:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        int n;
        scanf("%d", &n);
        getchar(); // 吃掉换行符
    
        int num[n];
        char line[50]; // 假设一行不会超过50个字符
        char id, result;
    
        for (int i = 0; i < n; i++) {
            fgets(line, sizeof(line), stdin); // 读取整行
            sscanf(line, "%c-T%c %c-F%c", &id, &result, &id, &result); // 分析这一行
            if (result == 'T') {
                switch (id) {
                    case 'A': num[i] = 1; break;
                    case 'B': num[i] = 2; break;
                    case 'C': num[i] = 3; break;
                    case 'D': num[i] = 4; break;
                }
            }
        }         
    
        for (int i = 0; i < n; i++) {
            printf("%d", num[i]);
        }
    
        return 0;
    }
    

    请注意,由于题目要求可能有多余的空格,上述代码中对fgets读取的行进行了简单的sscanf解析,并假设每行格式正确。如果实际题目中格式可能存在更多变数,请相应调整解析逻辑。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月8日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真