目录
scanf的基本定义
样式表加入其他东西的用法
普通做法:
用scanf样式表的做法:
原理:
关于scanf输入const char*类型
进阶:不会换行的“%[^\n]”
scanf的基本定义
周知众所C++有一个输入函数"scanf"他在库中
定义如下:scanf("样式表,例如%d %s %c...",&变量名称...)
注意: 变量名称是和样式表对应的,请在样式表里面不要加无关的东西(除外%d %s...的东西)[后面也会讲到加其他东西]
这是普通的输入代码: - #include <stdio.h>
- int main(){
- int a,b;
- scanf("%d %d",&a,&b);
- printf("%d\n",a+b);
- }
复制代码
输入 : 1 2
输出 : 3
输入 : 1(换行)
2
输出 : 3
假如在参数表加入其他东西: - #include <stdio.h>
- int main(){
- int a,b;
- scanf("a=%d b=%d",&a,&b);
- printf("%d %d %d\n",a,b,a+b);
- }
复制代码
从这可见样式表里多了"a=%d b=%d"后,必须要加上a=.. b=..才可以正常运行
样式表加入其他东西的用法
先上题目:
题目描述:
按照a*b=的格式输入算式,通过计算输出a*b的结果。
输入格式:
输入中包括一个表达式,如:a*b= a和b都是int类型的正整数。
输出格式:
结果只有一个正整数,整数在long long范围内。
输入样例:
12*11=
输出样例:
132
普通做法: - #include <stdio.h>
- #include <string>
- using std::string;
- int main(){
- string str;
- scanf("%s",str.c_str());
-
- int a=0,b=0,i=0;
- for(;str[i]!='*';i++){
- a*=10;
- a+=int(str[i]-'0');
- }
- i++;
- for(;str[i]!='=';i++){
- b*=10;
- b+=int(str[i]-'0');
- }
- long long int sum=a*b;
- printf("%lld\n",sum);
- }
复制代码
这个代码用了string类型先输入,然后再判断,找出两个数字
用scanf样式表的做法: - #include <stdio.h>
- int main(){
- int a,b;
- scanf("%d*%d=",&a,&b);
- long long s=a*b;
- printf("%lld\n",s);
- }
复制代码
功能都一样,前后一对比,前面的很难懂,后面的小白都看的懂
原理:
这个就用了scanf的必须输入"*"和"="号的原理,刚好可已舍去*和=号,就用了*来分割
关于scanf输入const char*类型
某些百*gpt的答案:
可是我们一看代码(这里用和头都一样的): - #include <cstdio>
- int main() {
- const char* str;
- printf("请输入一个字符串: ");
- scanf("%s", str); // 注意,这里需要为str分配足够的空间来存储输入的字符串
- printf("你输入的字符串是: %s\n", str);
- return 0;
- }
复制代码
运行结果:
也有可能是我编译器不行,所以我在这里建议大家使用头的std::string
进阶:不会换行的“%[^\n]”
这个“%[^\n]”是什么意思呢?
先引入情境:你要写入一个字符串,而且是有空格的那种。可是scanf它遇到空格就会默认是写完了。
这种情况我们可以用getline()方法,可是他在库里,不是c++完全没法引入,这时我们就可以用“%[^\n]”了。
都知道普通的情况下scanf遇到空格就停止读取:
- #include <stdio.h>
- int main(){
- char a[99];
- scanf("%s",&a);
- printf("%s\n",a);
- }
复制代码
而“%[^\n]”可以让scanf知道:“遇到\n(换行)才停止读取”。
例如: - #include <stdio.h>
- int main(){
- char a[99];
- scanf("%[^\n]s",&a);
- printf("%s\n",a);
- }
复制代码
现在scanf就算学完了! |