scanf输入%s,%c遇到空白字符的一些思考 您所在的位置:网站首页 c语言里面的空格代表什么 scanf输入%s,%c遇到空白字符的一些思考

scanf输入%s,%c遇到空白字符的一些思考

2024-03-28 01:14| 来源: 网络整理| 查看: 265

scanf输入%s,%c遇到空白字符的一些思考 问题引入字符%c与%s空白符空字符‘/0’与空格的区分scanf()输入与字符串的一些定义形式

问题引入

 原题链接link

输入格式:

第一行包含整数 N,表示操作数。

接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。  

输入方法:

输入格式: 2 I abc Q abc

#include using namespace std; void insert(char str[]) { //插入操作 } void query(char str[]) { //查询操作 } const int N = 100010; int main() { char str[N] int n; scanf("%d", &n); while (n--) { char op[2];//这里op[0]装命令op[1]用来装'\0' scanf("%s",op); scanf("%s",str); if(op[0] == 'I') insert(str); else if (op[0] == 'Q') cout char op; getchar(); scanf("%c",&op);//需要取单个字符的地址 getchar(); scanf("%s",str); if(op == 'I') insert(str); else if (op == 'Q') cout char letter; int age; char url[30]; scanf("%c", &letter); scanf("%d", &age); scanf("%s", url); //可以加&也可以不加& printf("26个英文字母的最后一个是 %c。\n", letter); printf("C语言中文网已经成立%d年了,网址是 %s。\n", age, url); return 0; }

运行示例: z↙ 6↙ http://c.biancheng.net↙ 26个英文字母的最后一个是 z。 C语言中文网已经成立6年了,网址是 http://c.biancheng.net。

scanf() 和 printf() 虽然功能相反,但是格式控制符是一样的,单个字符、整数、小数、字符串对应的格式控制符分别是 %c、%d、%f、%s。 对读取字符串的说明

对于第一种形式的字符串,在[ ]里面要指明字符串的最大长度,如果不指明,也可以根据=后面的字符串来自动推算,此处,就是根据"http://c.biancheng.net"的长度来推算的。但是在前一个例子中,开始我们只是定义了一个字符串,并没有立即给它赋值,所以没法自动推算,只能手动指明最大长度,这也就是为什么一定要写作char url[30],而不能写作char url[]的原因。

scanf() 读取数据时需要的是数据的地址,整数、小数、单个字符都要加&取地址符,这很容易理解;但是对于此处的 url 字符串,我们并没有加 &,这是因为,字符串的名字会自动转换为字符串的地址,所以不用再多此一举加 & 了。当然,你也可以加上,这样虽然不会导致错误,但是编译器会产生警告。

最后需要注意的一点是,scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串,请看下面的例子:

#include int main() { char author[30], lang[30], url[30]; scanf("%s %s", author, lang); printf("author:%s \nlang: %s\n", author, lang); scanf("%s", url); printf("url: %s\n", url); return 0; }

运行示例: YanChangSheng C-Language↙ author:YanChangSheng lang: C-Language http://c.biancheng.net http://biancheng.net↙ url: http://c.biancheng.net

对于第一个 scanf(),它将空格前边的字符串赋值给 author,将空格后边的字符串赋值给 lang;很显然,第一个字符串遇到空格就结束了,第二个字符串到了本行的末尾结束了。

或许第二个 scanf() 更能说明问题,我们输入了两个网址,但是 scanf() 只读取了一个,就是因为这两个网址以空格为分隔,scanf() 遇到空格就认为字符串结束了,不再继续读取了。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有