首页 > 其他分享 >scanf()格式字符串中的普通字符

scanf()格式字符串中的普通字符

时间:2023-04-17 19:58:04浏览次数:30  
标签:字符 scanf 控制符 空格 回车 字符串 制表符 输入

scanf() 函数中的输入控制符为 %c 时,用户输入应与引号“ ”中的内容一致

当%c前无空格时:

scanf("%c",&i);

scanf会读取第一个用户输入的值,就算用户输入的是空格、制表符或回车也会读取

当%c前有空格时:

scanf(" %c",&i);

scanf() 函数会将 " %c" 中的空格识别为空白字符(空格、制表符和回车),也就是说用户在输入正确的输入控制符之前会将所有的空格、制表符和回车视为空白字符(将所有挨在一起的这三类的视为一个整体,也就是" %c"中的空格)

# include <stdio.h>
int main(void)
{
    int i,j;
    char ch1,ch2;

    i = scanf(" %c %c",&ch1,&ch2);
    printf("%c %c %d\n",ch1,ch2,i);
}

PS C:\Users\14141\Desktop\vscode_c\test01> .\test6.exe




g
   


f
g f 2

可以看到用户输入的格式是和scanf()内的格式相吻合的:

用户在红框内的区域输入了若干空格、制表符和回车,scanf() 函数将其视为一个整体,对应着scanf() 中第 1 个 %c 前的空格,直到用户输入正确的输入控制符 ‘g’ ;

用户在蓝框内的区域同样也输入了若干空格、制表符和回车,scanf() 函数将其视为一个整体,对应着scanf() 中第 2 个 %c 前的空格,直到用户输入正确的输入控制符 ‘f’ ;

而像%d之类的其他输入控制符就不会有这样的问题,,它们都会自动跳过待输入值前面的空白:

#include<stdio.h>
int main()
{
	printf("int:\n");
	  int a ,b;
	  scanf("%d%d",&a,&b);
	  printf("%d %d\n",a,b);
}

可以看到在 scanf("%d%d",&a,&b); 内是没有多余的 非输入控制符 的,可我们在两个 %d 之前都留下了空格制表符和回车,scanf 并没有理会这些空白,直到遇到正确的输入控制符

标签:字符,scanf,控制符,空格,回车,字符串,制表符,输入
From: https://www.cnblogs.com/Hello-world-noname/p/17327242.html

相关文章

  • Java字符串
    Java字符串String的特点程序当中所有用双引号括起来的东西都说字符串不管有没有生成String类1.字符串的内容永不可变(重点)2.字符串永不可变,所以可以共享使用3.字符串效果相当于char[]数组,但是底层原理是byte[]字节数组创建字符串创建字符串的3+1种方法构造方法:1.创......
  • TStringList分割字符串
    beginTmpStrList:=TStringList.Create;tryTmpStrList.Delimiter:='-';TmpStrList.StrictDelimiter:=True;TmpStrList.NameValueSeparator:=#0;TmpStrList.Duplicates:=dupAccept;TmpStrList.QuoteChar:=#0;DoSomething;finallyTmpStrList.Fr......
  • #yyds干货盘点# LeetCode程序员面试金典:找出字符串中第一个匹配项的下标
    题目:给你两个字符串 haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果 needle不是haystack的一部分,则返回 -1。 示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹配。第一个匹......
  • ES6 拼接字符串(angular)
    angular 拼接字符串有没有什么好办法呢,发现es6可以。拼接方式:用反引号(`)包裹起来特点:模板中的内容可以有格式并可以定义多行通过${}方式填充数据大括号里面可以进行运算和调用函数例子: //例1constcontent1='helloboys!';this.message=`helloworld!${content1}`;//......
  • leaflet.openPopup() 方法传入参数是个模板字符串,如何将其改为使用vue的模板实现,可以
    注:这个问题是我使用cursor得到的回答。问:leaflet.openPopup()方法传入参数是个模板字符串,如何将其改为使用vue的模板实现,可以支持数据双向绑定为了将 this.map.openPopup() 方法中的字符串模板替换为支持双向数据绑定的 Vue 模板,您可以使用 Vue.extend() 方法创建一个新......
  • 1 redis介绍 、2 redis linux下安装 、3 redis启动方式、4 redis典型场景 、5 redis通
    目录1redis介绍2redislinux下安装3redis启动方式3.1最简启动3.2动态参数启动3.3配置文件启动3.4客户端连接命令4redis典型场景5redis通用命令6数据结构和内部编码7redis字符串类型1redis介绍#特性Redis特性(8个)#速度快:10wops(每秒10w读写),数据存在内存中,c语言实现......
  • WPF中Binding使用StringFormat格式化字符串方法
    https://blog.csdn.net/weixin_34040079/article/details/89587412 原文: WPF中Binding使用StringFormat格式化字符串方法 货币格式<TextBlockText="{BindingPrice,StringFormat={}{0:C}}"/>//$123.46货币格式,一位小数<TextBoxText="{BindingPrice,Str......
  • 字符串1
    #include<iostream>#include<string>usingnamespacestd;intmain(){ for(inti=0;i<2;i++) { stringcity,state; getline(cin,city,','); getline(cin,state); cout<<"city:"<<city<<"state:"<&l......
  • idea Java json 复制字符串会出现空格的问题
    普通JSON{"secretKey":"2513e9c533c14271a1bc8a52eacecebe","appKey":"19b9257a1f464e93b087af9d12572ce1"}复制idea{\"secretKey\":\"2513e9c533c14271a1bc8a52eacecebe\",\"appKey\":\&......
  • 如何限制textarea域中的字符的个数
    我们都知道textarea标签没有maxlength属性,那么就需要我们用代码来进行控制,下面是针对texarea写的一个限制输入长度的jQuery.fn.maxLength=function(max){this.each(function(){vartype=this.tagName.toLowerCase();var......