scanf函数问题

作者&投稿:文沸 (若有异议请与网页底部的电邮联系)
SCANF函数的问题~~~~~~

你没有正确理解scanf的实现方式,
scanf并不是像直观上所理解的直接接收用户的当前输入作为所读取的数据,
scanf实际上是读取的当前键盘缓冲区内的数据,来作为当前的输入。

所以如果当前键盘缓冲区不为空的话,scanf并不会读取当前的客户输入。
在你的这段代码中,scanf就是将键盘缓冲区中所残留的你上一次输入的回车,作为本次输入读入了。

要实现你的要求,可以在scanf前先进行一下键盘缓冲区的强制清空处理:
fflush(stdin);

代码这么写:
char a;
scanf("%c",&a);/*假如说输入a*/
for(;;)
{
printf("11
");
fflush(stdin);//强制清空键盘缓冲区
scanf("%c",&a);
if (a == 'a')
{
printf("12
");
}
else
{
printf("%c",a);
break;
}
}

应该在int下面定义一个变量g

因为C语言不能无中生有
int h=1;
char g;
while(h)
{
scanf("%c",&g);
while(g=='y')
{
printf("welcome next step!!!
");
g='n';
}
h=0;
}

在scanf中你最好不要用那么复杂的,你直接写scanf("%ld%ld\n",&a,&b);就可以了,你的两个问题是,在scanf中出现的比如你的a=之类,这些在你要求输入的时候你也要打,比如你的意思是输入数字2,但是如果你写sccanf("a=%ld",&a);的话,那么你在输入的时候要打a=2,不能只打2。第二个问题是,scanf语句是需要&的,因为输入的时候是输入地址,加入&就代表了地址。
long int 和int差了很多,long int的数字范围是-2147483648~2147483647,int的数字范围是-32768~32767,一个是占四字节,一个是占2字节,只是你的数字小而已,所以没感觉出来

把\n去掉就可以啦

scanf("%ld%ld\n",&a,&b);
这就好了
区别自己看
long int 的取值范围跟int 的范围差很多的 只是你没感觉到


...为什么在main函数下的第一while中要加这句“canf("%c",&ch...
在main函数中加入 scanf("%c",&ch);是为了使每次循环之后ch的值都会变化,当ch=='\\n'时就会跳出循环;如果没有这句话,那么ch的值不会变化,就不能够跳出while循环,程序就进入里死循环。

有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是...
【答案】:D 本题考查5canf()和gets()函数的使用。scanf()和gets()函数都可以用于输入字符串。scanf()中赋值对象必须是一个地址,D中s[1]是数组的一个元素,不是一个地址,因此不正确。

函数是干嘛的
canf(输入函数)rintf(输出函数)gets (标准输入流函数)C语言中的库函数 C语言为了方便用户编写程序,为用户开发了大量的库函数,其定义在.h文件中,用户可以调用这些函数实现强大的功能。所以对于用户来说,掌握这些函数的用法是提高编程水平的关键。

C语言用scanf给数组赋值问题
scanf()中如果在%d后面加了一个空格,会使scanf()函数在读数时跳过输入中的空白字符(包括空格、回车等),直到遇到第一个非空白字符出现为止。当你输入完5个数之后,由于你的%d后面带空格,所以scanf仍然在期待出现一个非空白符才结束。你甚至可以在输入完5个数之后,再输入一个字母,也是可以的(只...

函数是干什么的
这种对应关系就表示Y是X的函数。函数(function)的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记...

scanf函数问题
在scanf中你最好不要用那么复杂的,你直接写scanf("%ld%ld\\n",&a,&b);就可以了,你的两个问题是,在scanf中出现的比如你的a=之类,这些在你要求输入的时候你也要打,比如你的意思是输入数字2,但是如果你写sccanf("a=%ld",&a);的话,那么你在输入的时候要打a=2,不能只打2。第二个...

error C2146: 语法错误 : 缺少“;”(在标识符“sort”的前面) “int...
include using namespace std;int Shun_zi(int a[],int nLen); \/\/我自己写的顺子函数。你看看 int sort(int m[],int nLen); \/\/扑克牌数排序 int print(int b[],int nLen); \/\/输出全部扑克牌数 int canf(int n[],int nLen); \/\/输入扑克牌数 int judge(int x[],...

C语言矩阵键盘函数疑问
uchar keyscan(void){ uchar scancode, tmpcode; P1 = 0xf0; \/\/ 发全0行扫描码 if ((P1 &0xf0) != 0xf0) \/\/ 若有键按下 { delay(); \/\/ 延时去抖动 if ((P1 &0xf0) != 0xf0) \/\/ 延时后再判断一次,去除抖动影响 { scancode = 0xfe; while ((...

C语言中的问题不明白为什么 新人麻烦详细解释一下谢谢
这里scanf指定逗号为输入的分隔符号。所以输入时数字和字符之间必须有逗号。scanf不指定分隔符时,默认以空白字符(空格、回车、制表符)为分隔符。PS:如果写%d%c不指定分隔符号。由于第二个变量是字符型,输入时中间不要加空格符,否则会将空白符号做为字符接收。

背包问题的求解:
if(cankao1[i]==1) { if(i%5==0) printf("\\n"); printf("%13ld",array[i]); } } else printf("\\nSorry.We have not got a solution.\\n"); } 4)动态规划算法 解决0\/1背包问题的方法有多种,最常用的有贪婪法和动态规划法。其中贪婪法无法得到问题的最优解,而动态规划法都可以得到最优解...

白下区15592537673: 简单C语言scanf输入问题 -
仝幸复方: (1)我初学c语言时也碰到了跟你一样的问题, 那是因为scanf函数的一个天生的毛病, 你在调用scanf()时,输入一个数字,并按下回车, 你的本意是只想让scanf接受一个数字, 但同时scanf()把那个回车也送入了缓冲区中, 你可以这样改...

白下区15592537673: 关于scanf()函数的问题,请各位高手解答... ... (注:该问题非专业人士不可答) -
仝幸复方: 这个时候a的值不确定.第二,scanf(&quot第一;%d&quot,input(b); 这个函数是值调用,不是地址调用,比如a那就输入失败;,&a);这里有可能获取输入数字失败,如果你输入一个非数字

白下区15592537673: 一个关于c语言scanf函数的问题 -
仝幸复方: 由于输入流错误,scanf("%2d*%d",&x,&y); 当输入365*36是首先x获取36这个数据,然后要获得*字符但是流中不是该字符,因而输入流错误,后面的y数据的处理就依赖于编译器了,不同编译器的数据可能是不同的,没有必要考究从这个数据中获得什么有用信息.

白下区15592537673: C语言 格式输入scanf函数 中的问题 -
仝幸复方: scanf("%d%d%d" -- %d 表示按整型 输入一个数,%d%d%d 表示按整型 输入三个数. scanf("%d%d%d",&a,&b,&c); 后面的 三个参数 &a,&b,&c 表示把依次输入的三个数,按次序 存到 a的地址里,b的地址里,c的地址里.3<回车>4<回车>5<回车> -- 输入的第一个数是 3,第二个数是 4,第三个数是 5.输入数据 的分隔符 是 <回车> 键第一个数是 3,存到 a 第二个数是 4,存到 b 第三个数是 5, 存到 c

白下区15592537673: 一个关于scanf的简单的问题 -
仝幸复方: scanf函数会返回输入的个数 是正整数.如果一个都没输入则返回的是 -1 也就是EOF~就是对scanf返回的结果进行取反. 对-1进行取反就是0对正整数取反是大于0 的 所以while(~scanf("%d",&n))相当于while(scanf("%d",&n)!=EOF) 而且位运算速度较快.

白下区15592537673: c语言scanf函数格式问题 -
仝幸复方: 首先明确1. 对于%d的输入,会忽略之前的空格2. 对于%c的输入则不会忽略.3. 对于%d的输入,会被字符截断,这也就是 输入"10A20B"的时候,也不会错的原因了.正确答案是A x1接收了10, y1接收了字符A,之后是一个空格,而输入的是%d,所以会忽略空格,所以x2接收了20,y2接收了字符B 分下下其它的选项 B, x1 接收了10, y1接收了空格,错误 C 错误同B D x1接收了10, y1接收了A,x2接收了20,y1接收了空格.

白下区15592537673: scanf函数 字符串输入问题 -
仝幸复方: 分两种情况来说明.1 输入字符.char c;scanf("%c",&c); //c定义为字符变量,格式符用%c,前面有&,只能接收一个字符.2 输出字符串.char c[81];scanf("%s",c); //c定义为字符数组,格式符用%d,前面没有&,至多接收80个字符.

白下区15592537673: C语言中关于scanf的问题 -
仝幸复方: #include"stdio.h" main() { int a; printf("%d",scanf("%d",&a)); // 这个很明显的告诉我们 scanf()返回的并非我们输入的数值,而返回的是输入了几个数字,这里只输入了一个数 所以返回值为1 如果改为 scanf("%d",&a); printf("%d",a); 则是把我们输入的值A存储在内存中,通过printf()语句显示出来 // }

白下区15592537673: c语言scanf函数的问题 -
仝幸复方: 是这样的,在c语言中用十进制指定输入宽度时,它先把前边的给第一个数,然后在顺次给第二个数……,还有一个问题就是在有标准输入和标准输出的话最好在前边加上#include<stdio.h>不然的话,有可能会运行错误.

白下区15592537673: scanf函数的问题 -
仝幸复方: 字符'1'对应的数字是49) 第二个情况 输出 49 和 1 scanf用%c来格式化的 所以是把 输入的'1'字符 赋给 int i , 字符赋给int 不会出错.字符'1'对应的int数字 是49 所以 第一个printf是49 第二个 printf是把'1' 输出 就是1 第三个情况 输出...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网