PAT1078 字符串压缩与解压 scanf("%c\n",&ch) 和 cin>>ch + getchar()有什么不同?

题目
https://pintia.cn/problem-set...

相关代码

#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int read()
{
    char ch = getchar();
    int f = 1;
    int x = 0;
    while (ch < '0' || ch > '9') { if (ch == '-')f = 0; ch = getchar(); }
    while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
    return f ? x : x * -1;
}
int main()
{
    char c;
    // scanf("%c\n",&c); // 问题在于这里 一开始是用scanf的 但是有两个点通过不了 换成cin+getchar就过了
    cin >> c;
    getchar();
    string s;
    getline(cin,s);
    if(c == 'C')
    {
        for(int i = 0;i < s.length();)
        {
            int count = 0;
            char t = s[i];
            while(s[i] == t)
            {
                i ++;
                count ++;
            }
            if(count != 1)
            {
                printf("%d",count);
            }
            printf("%c",t);
        }
    }
    else
    {
        for(int i = 0;i < s.length();i ++)
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int temp = 0;
                while(s[i] >= '0' && s[i] <= '9')
                {
                    temp = temp * 10 + s[i] - '0';
                    i ++;
                }
                for(int j = 0;j < temp;j ++)
                {
                    printf("%c",s[i]);
                }
                if(temp == 0)
                {
                    printf("%c",s[i]);
                }
            }
            else
            {
                printf("%c",s[i]);
            }
        }
    }
    printf("\n");
    
    return 0;
}

图片描述
图片描述

你期待的结果是什么?实际看到的错误信息又是什么?

不太懂这是什么玄学. 问了几个人都说是一样的 一开始在网上找到了一位跟我一样是一格式错误一wa的博客. 但是并没有说明为什么. 后来看了几篇题解后尝试把scanf换成cin居然就过了. 请问scanf("%cn") 和 cin+getchar有什么区别吗 最后不是都为了吃掉换行符以便读取一行字符串吗

更新一下: 自己尝试了下 换成scanf("%c",&c); + getchar(); 可以ac题目. 想知道scanf("%cn",&c)里面的n 我的初衷是想用来读换行的 难道并不能读吗

阅读 2.3k
1 个回答
新手上路,请多包涵

cin的实时性较差,因为它使用了缓冲区,一般情况下满了才刷新的。
对于字符:cin的输入忽略空格和回车。scanf("%c",&i)等价于i = getchar(),换行符和回车都会被读入。
scanf是格式化输入,printf是格式化输出。
cin是输入流,cout是输出流。效率稍低,但书写简便。
格式化输出效率比较高,但是写代码麻烦。
流输出操作效率稍低,但书写简便。

int i; 
cout<<'a'; 
cin>>i; 
cout<<'b'; 

以上程序是平时也遇过的,运行结果什么都没看到输出,输入一个整型比如3再按回车后ab同时显示出来了。 但是这样的情况并不是经常发生,是在一些比较大型的工程中偶尔出现,原因是字符a先到了缓冲区,但是没输出,等输入了i,b进入缓冲区后再一并输出的。流输入也是差不多的。
有帮助请点赞或采纳谢谢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题