C/C++输出输出相关问题

C/C++输出输出相关问题

  1. scanf(“%d”),如果缓存区的开始是数字,scanf会读入,直到遇见非数字字符,否则远不会读入

    #include<iostream>
    using namespace std;
    int main() {
         
        int a[100];
        char c[100];
        // scanf的返回值为“所输入的数据与格式字符串中匹配次数.”
    	//简单来说就是,它返回已成功赋值的数据项数;出错时则返回EOF.
    	//(注:EOF(End Of File)是一个预定义的常量,等于-1.)
        for (int i = 0; i < 5; ++i) {
         	
            //一次输入1a2b3c4d5e,scanf(%d)只有一开始遇见数字才能把数字读走,%d会读入数字,直到遇见字符a停止
            cout<<scanf("%d", &a[i]) //如果在下一读入数字前,缓冲区最开始依然不是数字就永远不会读入之后的数字
           // c[i] = getchar();		//通过注释或解注释此语句,通过调试看数组a和c里面的内容,即可得证
        }
        return 0;
    }
    
    
    #include<iostream>
    using namespace std;
    int main()
    {
         
    	int a;				
    	scanf("%d", &a);	//输入“*5”
    	char b = getchar();   //b='*'
    	char c = getchar();	  //c='5'	//a不变
    	return 0;
    }
    
  2. scanf(“%d\n”)多余输入问题及\n的读入问题,详细可看链接的另一篇博客。简单提要:
    1)空白符:指空格符、制表符、回车符;
    2)\n(回车)是被当作输入结束命令启动对应变量接收数据,但并不会把\n读走,只是检测。
    3)除了scanf(“%c”),scanf有一个特性——忽略先导的空白符,只要他们连续的出现在缓冲区的开头,不管有多少个连续的空白符,scanf都会把其读走并丢弃,直到遇到非空白符,再读入有意义的字符;
    4)读取字符串(字符数组)的时候,比如读aaa\n,你读入字符串最后会带有\n,这个\n并不是你输入的\n,而是编译器自己添加的,你自己输入的\n还留在缓冲区中。

  3. 在C++中,使用std::cin从用户那接收输入时,如果用户直接按下回车键而没有输入任何内容,也就是提交了一个空字符串,那么std::cin就会等待,直到用户输入有效的数据。也就是说,空字符串会被看做是无效的输入。此时就需要使用std::getline函数。这个函数会读取包含空白字符甚至什么都没有的输入,直到用户按下回车键,例如:

    #include <iostream>
    #include <string>
    
    int main() {
         
        std::string str;
        std::getline(std::cin, str);
        if(str.empty()) {
         
            std::cout << "The string is empty" << std::endl;
        } else {
         
            std::cout << "The string is " << str << std::endl;
        }
        return 0;
    }
    
  4. 上面第二条第2)点提到,\n当做输入结束标志,用于检测,并不会把其读走。所以在使用std::getline时要注意缓存区里的\n,可以使用getchar()读走\n,以便于std::getline读一行。
    getchar是C/C++中的一个标准库函数,用于从标准输入(通常是键盘)读取一个字符,并返回读取的字符,如果读取失败或到达了文件尾,就返回EOF常量。

相关推荐

  1. C/C++输出输出相关问题

    2024-02-19 08:30:01       58 阅读
  2. [CLS] 输出向量 和 [MASK] 向量

    2024-02-19 08:30:01       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 08:30:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 08:30:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 08:30:01       87 阅读
  4. Python语言-面向对象

    2024-02-19 08:30:01       96 阅读

热门阅读

  1. kubeasz部署k8s集群

    2024-02-19 08:30:01       54 阅读
  2. 20240217-您能到达的最远建筑物

    2024-02-19 08:30:01       43 阅读
  3. C++——数据类型笔记

    2024-02-19 08:30:01       45 阅读
  4. 常见的Web前端开发框架推荐

    2024-02-19 08:30:01       52 阅读
  5. 摆(行列式、杜教筛)

    2024-02-19 08:30:01       45 阅读
  6. Kubernetes基础(十八)-k8s存储对象Persistent Volume

    2024-02-19 08:30:01       39 阅读
  7. Eureka和Nacos

    2024-02-19 08:30:01       45 阅读
  8. 动态头部:统一目标检测头部与注意力

    2024-02-19 08:30:01       36 阅读