scanf

C语言中用scanf连续输入两个字符类型的问题(转)

点点圈 提交于 2020-02-13 00:16:39
昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include<stdio.h> int main() { char ch1,ch2; printf("Input for ch1:/n"); scanf("%c",&ch1); printf("ch1=%c/n",ch1); printf("Input for ch2:/n"); scanf("%c",&ch2); printf("ch2=%c/n",ch2); } 表面上看这段程序是没有错的,也可以运行,但运行过程中到第二个scanf输入值给ch2时,程序不会停止,而是直接运行到最后一个printf ! 为什么?当时百思不得其解。。。 今天上网查了下才知道,原来scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按 回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了ch2。而如果第二个scanf的输入格式不是%c时,由于格 式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个%c的格式时才会出现这样的问题! 解决办法:(二办法任选其一) 1。清空输入缓冲区 第一个scanf后加入语句:fflush(stdin); //C语言清空输入缓冲区函数 2。格式控制中加入空格 将第二个scanf改为:scanf("

2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution

假装没事ソ 提交于 2020-02-12 20:27:52
A - Arranging tiles 留坑。 B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符串后面之后再翻转整个字符串,在这两条规则之下,求有多少种打印给定字符串的方法 思路:如果第一个字符是辅音,那么答案为0 如果全是辅音或全是元音,那么答案为1 如果只有一个辅音,答案为len 否则是最中间两个元音中间的辅音字符个数+1 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define N 100010 6 7 char s[N]; 8 9 bool vis[210]; 10 11 inline void Init() 12 { 13 vis['a'] = 1; 14 vis['e'] = 1; 15 vis['i'] = 1; 16 vis['o'] = 1; 17 vis['u'] = 1; 18 } 19 20 inline int work() 21 { 22 int len = strlen(s); 23 if (len == 1) return 1; 24 int cnt = 0; 25 for (int i = 0; i < len; ++i) if (vis[s[i]]) cnt++; 26 if

2019-2020nowcoder牛客寒假基础4

北城余情 提交于 2020-02-12 14:48:53
A欧几里得 1 0 2 1 3 2 第一个数字是上一行数字的和,第二个数字是上一行数字第一个数字 #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #include <cstring> #include <queue> #include <set> #include <map> #include <stack> using namespace std; #define scd(a) scanf("%d",&a) #define scdd(a,b) scanf("%d%d",&a,&b) #define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c) #define scl(a) scanf("%lld",&a) #define scll(a,b) scanf("%lld%lld",&a,&b) #define sclll(a,b,c) scanf("%lld%lld%lld",&a,&b,&c) #define prl(a) printf("%lld\n",a) #define prd(a) printf("%d\n",a) #define prf(a) printf("%lf\n",a) #define ptd(a) printf("%d ",a)

2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

非 Y 不嫁゛ 提交于 2020-02-12 12:24:55
Time:2018.4.29 8:30-13:30 Link A 题意 给出总的路程L,普通速度a,喝咖啡速度后b,等咖啡时间t,咖啡有作用时间r,和n个咖啡厅的位置。买咖啡需要等待,喝咖啡时速度提升 问在哪几个咖啡厅买咖啡,走完总路程所花的时间最短。 可以扔掉咖啡,可以用手机预定咖啡。(L<=1e11,a,b<=200,t<=300,r<=1200,n<=5e5) 假如不可以预定怎么做? 分析 Difficult ym:单调队列优化后dp???,留坑 B solved by ym 题意 四人接力跑,现分别给出n个人的第一棒和其他棒的时间,问选择四个人所用时间最小的时间,和对应的人(即方案) (n<=500) 分析 ym:首先直观的n^4暴力枚举,肯定不行,枚举第一棒贪心选取其余的即可 时间复杂度O(nlogn) C 题意 分析 大大大模拟,留坑 D solved by ym&czh 题意 给出n个长度为m的0/1串,0和0或者1和1都是相同,问找出一个字符串使得与其他所有串相同的的最多的最少(n<=1e5,m<=20) 分析 ym:相同的数量尽可能少==不同的数量尽可能多,故可以将每个串看做一个点出发从其BFS找所有没有出现过的点,找一个different最大 为什么different最大的是答案?我们BFS找到的每一个点都是原来的点最小different 时间复杂度:O(k*2

POJ 1716 Integer Intervals

牧云@^-^@ 提交于 2020-02-12 05:45:23
题意:给出一些区间,求一个集合的长度要求每个区间里都至少有两个集合里的数。 解法:贪心或者差分约束。贪心的思路很简单,只要将区间按右边界排序,如果集合里最后两个元素都不在当前区间内,就把这个区间内的最后两个数加入集合,如果只有一个元素在区间里就加一个,如果两个元素都在区间里就不加。 差分约束系统用来解一个不等式组,只要这个不等式组里的不等式形如x1 - x2 <= c,c为常数就可以用差分约束来解不等式,将每个变量看做点,每个不等式看做边,求一个最短路,那么dis[i]就是不等式的一组解,主要利用的原理就是在最短路问题中:dis[v] <= dis[u] + edge[u][v],而将x1 - x2 <= c进行移项就可以得到以上形式,由于有负权,所以一般用bellmanford或者spfa……不过我不会写spfa……如果产生负环说明无解。 对于本题来说,将每个区间端点都看做点,sum[i]表示集合中小于等于i的数的个数,则对于一个区间[l, r]来说有不等式sum[r] - sum[l - 1] >= 2,转化成上述形式就是sum[l - 1] - sum[r] <= -2,可以看做是点r到点l-1的一条权值为-2的边。除了题中给出的条件,还有一个隐含条件为0 <= sum[i] - sum[i - 1] <= 1,用以上不等式建图后跑最短路,dis[n] - dis[0

poj 1716 Integer Intervals

回眸只為那壹抹淺笑 提交于 2020-02-12 05:36:16
Integer Intervals http://poj.org/problem?id=1716 Time Limit: 1000MS Memory Limit: 10000K Description An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval. Input The first line of the input contains the number of intervals n, 1 <= n <= 10000. Each of the following n lines contains two integers a, b separated by a single space, 0 <= a < b <= 10000. They are the beginning and the end of an interval. Output Output

一元多项式相加(链式实现)

被刻印的时光 ゝ 提交于 2020-02-11 22:41:33
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct LNode //结点类型 5 { 6 int index; //指数 7 int coe; //系数 8 struct LNode *next; 9 }LNode,*Link; 10 typedef struct //列表类型 11 { 12 Link head,tail; //头指针和尾指针 13 int len; 14 }LinkList; 15 16 int InitList(LinkList *L); //构建空表 成功返回1,失败返回0 17 int MakeNode(LinkList *L,int index, int coe); //创建结点并存入指数和系数 成功返回1,失败返回0 18 void Add(LinkList *LA,LinkList *LB,LinkList *LC); //”和多项式"没有重新生成,而是从A,B中摘取到C上 19 void print(LinkList *L); //用于打印链表 20 21 int main() 22 { 23 LinkList LA,LB,LC; 24 int m,index; //输入m个一元多项式 25 int coe; 26 InitList(&LA); 27 InitList(&LB);

c和c++中读取数据的方式总结

牧云@^-^@ 提交于 2020-02-11 20:41:19
目录 c 输出 printf() 输入 scanf getchar(), putchar() gets(), puts() c++ 输入 cin() getline() get() 输出 cout 最近在学习C和C++,除了在写OS的时候用到外,写算法的时候也会用到,整理记录C和C++读取数据的各种方式。 文章较长,总结稍微详细了一点。 c 输出 printf() 在 stdio.h 中包含最经典的输出函数 printf #include <stdio.h> // 执行 printf() 函数需要该库 int main() { printf("hello weiwei"); //显示引号中的内容 return 0; } 格式化输出,在 printf 中格式化输出的格式: 1)类型 格式字符 含义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进制形式输出无符号整数(不输出前缀Ox) u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 e,E 以指数形式输出单、双精度实数 g,G 以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串 p,P %p 是一个新的格式控制符,它表示以十六进制的形式(带小写的前缀)输出数据的地址。如果写作 %P ,那么十六进制的前缀也将变成大写形式。

浙江大学第十九届图森未来杯大学生程序设计竞赛

五迷三道 提交于 2020-02-11 16:04:55
赛后总结:  T:这是我们第二次集体去参加学校的比赛,总体来说比上一次去浙江中医药校赛成绩好一点,也算是看到了我们自己的进步?然后呢,今天比赛,我们分头看了三道签到题,E J G,然后彭彭和金姐飞快的A了起来,我。。。看E看了好几遍才看懂。因为太紧张了,所以看到别人A那么快,然后就很想快速读懂题意。然后就开始看别的,直到彭彭和我们说A有点像二分图匹配,然后就开始看A了,然后我们想了一下,m那么大不可能是二分图,就想别的办法。最后和金姐讲了我的思路,然后就开始操作。于是看起了B,接收到题目意思有点问题,想了快两个小时也没想出来。期间金姐也在疯狂A提交。崩溃啊。然后就看了C,这题也有很多读题误区,金姐开始写了。我再读了一遍B,发现题意和我之前想的不一样。。。。啊啊啊然后就和队友说了,我们就想板子模拟大数中。最后没时间了,啥都没做出来。赛后队内总结了经验,交流一下以后读题的分工,还是很有收获的一场比赛。emmm,加油吧。  J:今天前三题十分顺利,但是在A题上掉进了自己作的坑,疯狂WA,还好最后A出来了。C题感觉能写出来,可是时间不够了,哭~~~还是实力太弱了,继续努力,下次加油! P:看J时,浏览前几行后发现跟素数有关,数据范围还特别大就放弃了(其实真正的题目在最后三四行)翻了前面的题目。看了榜,发现J题A的很多,重新看回J题才发现真的是道水题,我就直接做了。接着,跟榜看了A

指针的用法

我的未来我决定 提交于 2020-02-11 04:40:49
大家都应该知道, 指针是个什么玩意儿, 它就是用来存另一个变量的地址的。这玩意儿在程序中容易引起不易察觉的错误, 而且会给调试带来莫大的困难。 尽管如此,它现在依然存在着, 这就从另一方面说明了, 它的功能爆表。 在实现链式存储, 图, 树, 森林时, 大都要用指针。 不仅如此, 在访问多维数组,函数参数传递时, 也多用指针。下面给出指针的一些常用的用法代码。      /*指针的声明及一般用法*/ /*________________________________________________________________*/ //声明: int a; int *p=&a; int a; int *p; p=&a; #include<stdio.h> int main() { int a, b; int *ipointer1, *ipointer2; scanf("%d%d", &a, &b); ipointer1 = &a; ipointer2 = &b; printf("The number is:%d %d\n", *ipointer1, *pointer2); } #include<stdio.h> int main() { int *p, q; p=&q; scanf("%d", p);//另类写法。 printf("%d\n", q); return 0; }