在调试C语言中关于SCANF中出现的问题

作者&投稿:职士 (若有异议请与网页底部的电邮联系)
C语言中的问题关于scanf的输入~

这个程序运行很正常啊(除了函数名有点问题,应该是CreateLinkList()吧,不是GreatLinkList),你输入了好多数据,执行的不是CreateLinkList(),而是主程序中的
while(e) { insertList(&l,q,e); q=q->next; scanf("%d",&e); // <---实际读入在这里!!! }CreateLinkList只是创建一个LinkList,传入参数n,就是创建n的节点的LinkList,你的“主”程序只调用了CreateLinkList(1),所以它只是创建了一个具有1个节点的LinkList(=创建了节点头),所以只是第1个输入值被“读入”,然后执行的就是后面主程序里的
scanf("%d",&e);然后才是的while{...},里面不断insert然后再scanf直到e==false.

这个 ,其实scanf里面的%5d的5应该是没有意义的,也就是说直接输入10^20Aa1.5-3.75(这里可以不要空格,减号充当了分隔符),但是10和20之间是必须加上分隔符的,空格或者Tab键都可以
输入是必须让编译器能够正确识别就可以了,不必和答案一般见识,另外,老是在这些格式上纠缠是在浪费自己的青春,花时间学点真功夫吧,比如这个,自己调试一下就知道谁是对的了

这个很简单,只需要把scanf("%d %d %d\n", &a, &b, &c);
内的\n去掉就行.

因为,在scanf函数原形内,已经默认回车即进行标准输入,又在输入数据格式后加\n的话,机器默认一个回车,但是还在等待另一个回车,换句话说,机器只是呆板的执行输入,不会进行判断,确认第二个回车.所以不会输入数据.

scanf()是格式输入函数.它规定的参数只有两类,一类是格式串,一类是数据的地址.而且,格式中里的格式符数必须与数据一致.你没按它的规定使用.当然出错.

我的考虑是这样的
scanf把\n当做是你输入数据的间隔符了,也就是说它以为你回车之后还要继续输入数据,而不是完成输入,所以还在等待你继续输入数据。
你输入完3个数之后回车,再随便输入一个数后回车应该就可以了,当然最后这个数是没有保存的。

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

如果你用第二个的话,在输入数字后加上\n,回车就可以正确显示了。
楼主试一下。希望采纳。


C语言中strlen(s)是什么意思?S是一个数组!
头文件:string.h 格式:strlen (字符数组名)功能:计算给定字符串的(unsigned int型)长度,不包括'\\0'在内 说明:返回s的长度,不包括结束符NULL。参考代码:include<string.h>#include<stdio.h>int main(){ char s[100]="GoldenGlobalView"; printf("%s has %d chars",s,strlen(s)...

s=-s在c语言中什么意思
意思是把s的值乘以-1,然后赋给s

C语言指针问题 **s 中 s与&s的意义和关系
但是它没开辟内存空间。在你的程序中开辟内存空间只有char*a="123".你可以用VS这IDE打断电调试,开内存的地址就知道了。对于初学者,理解这有些难度,但是你多看看,多想想几次下来你就明白了,没啥难点。平时多看看C语言资料(如C语言必知495个问题,C++ PRIME等),几本书下来任何语言不成问题 ...

c语言程序中 从字符串s中删除指定的字符c.
c语言从字符串s中删除字符c:include<stdio.h> \/*从字符串S中删除字符c*\/ voidsqueeze(char[],char);intmain()include<stdio.h> gets(s);printf("输入需要删除的指定字符ch:");ch=getchar();for(i=j=0;s[i]!='\\0';i++)if(s[i]!=ch)s[j++]=s[i];s[j]='\\0';printf("...

c语言中为什么int s=0和int s,然后s=0的结果不一样?
两个程序中的s行为不一样。在第一个程序定里,a递增时,s一直在叠加。在第二个程序里,a递增时,s会重新置0。所以,并不是int s=0;和int s; s=0;的问题,两者无差别。C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的...

c语言中 **s是什么意思?和*s与s有什么区别?
s是二维指针,是一个指向指针的指针。假设 int a, *p,**s;则 p=&a; s=&p;能看懂吗?这里的**s==a,*s==p, s就是一个存放着p的地址的指针变量

c语言中% d,% u,% f,% s,% c,% e的用法
d 十进制有符号整数 u 十进制无符号整数 f 浮点数 s 字符串 c 单个字符 p 指针的值 e 指数形式的浮点数 x, %X 无符号以十六进制表示的整数 0 无符号以八进制表示的整数 g 自动选择合适的表示法 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。ld ...

在C语言中,若*S=1;则S[0],S[1]的值是多少,可以详细解释一下吗?_百度...
与变量声明和初始化有关。若*S=1;则S[0] 也等于 1。因为中括号是运算符,可以化为: s[0] = *(s+0) 等于 *(s) 等于 *s.类似, s[1] = *(s+1), 它的值 与 变量声明和初始化有关。假如是:int a[]={11,12,13,14,15};int *s=a;s=1;那么 s[1] 的值没...

c语言%* s是什么意思?
c语言输出格式%*s,标识形参占位。在printf中使用,表示用后面的形参替代的位置,实现动态格式输出。例如:printf("%*s",10,s);意思是输出字符串s,但至少占10个位置,不足的在字符串s左边补空格,这里等同于printf("%10s",s)。

C语言中*p代表什么?还有*s代表什么?
开设指针变量s可指向字符型数据或字符串;程序中写p=&a; *p=10;可将变量p指向的存储区(这里是你自己定义的变量a的位置)赋值为整型的10;s=b;或s=&b[0]; *s='a'; s++; *s='b'; s++; *s='c'; s++; *s=0;可用s顺序访问b数组将b[0]~b[3]存储字符串"abc"。

柳江县13117992357: VC调试C语言时遇到scanf怎么输入? -
鲜齐聚肌: 就在cmd里面照平常一样输入啊,输入之后程序就会正常运行调到下一个断点(按F5)或下一行(按F10)

柳江县13117992357: “scanf”在c语言中什么意思? -
鲜齐聚肌: scanf 是C语言中的输入函数,被定义在头文件stdio.h里: 函数原型: int scanf(const char *format,...);函数 scanf() 是从标准输入流stdio (标准输入设备,一般是键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中.其调用形式为: scanf("<格式说明字符串>",<变量地址>);变量地址要求有效,并且与格式说明的次序一致.

柳江县13117992357: 在VS环境下调试C语言,添加了头文件#include<stdio.h> ,有scanf();语句但是运行的时候还是提醒错误. -
鲜齐聚肌: 如果是VS下的工程,添加#include "stdafx.h"试试.如果是VS下单独建个文件,是不能编译的,他只认工程. 第三,main前面加个 int 或 void试试.

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

柳江县13117992357: C语言 关于scanf() -
鲜齐聚肌: 我晕.楼主指的是这个问题?????其实这个问题很简单的 只要楼主记住.回车键也是一个字符.在上面的程序里你可能输入了一个字符或者一个数字.然后你按了一下回车.....注意这时回车键是一个字符.所以直接 传给了你的scanf(...

柳江县13117992357: c语言中的scanf 函数的用法 -
鲜齐聚肌: 输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&.scanf("%s",s);改为scanf("%s",&s); scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);格式控制字符串包含:格式控...

柳江县13117992357: 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

柳江县13117992357: C语言中关于scanf输入字符问题大神速来 -
鲜齐聚肌: 原因是在input函数里面有接受用户输入的动作,而输入一定是以回车结束,那么这个回车就会残留在缓存中,而当你的scanf读取flag的时候,程序会自动获取前面的那个回车符号,这就是用%c会自动跳过的原因,而用%s的话,程序就会等待下一行输入,回车符号并不会被接收,建议在scanf("%c", &flag);修改为: fflush(stdin); //清空缓存 scanf("%c", &flag);

柳江县13117992357: C语言中常见错误 -
鲜齐聚肌: 11.输入数据时,企图规定精度. scanf("%7.2f",&a); 这样做是不合法的,输入数据时不能规定精度. 12.switch语句中漏写break语句. 例如:根据考试成绩的等级打印出百分制数段. switch(grade) { case 'A':printf("85~100\n"); case 'B':...

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