C语言中scanf函数的问题
这个问题问的好。
你问题的第二种情况是说如果输入多个字符类型数据的情况。
如果是这样,请注意,除非,如果scanf后面的格式是%c的,那么它只能吸收你输入的一个字符,后面的东西全部放在缓存区。也就是说,你再接上一个scanf( "%c", &c),它会继续吸收你前面没有吸收到的字符。
如果下面语句段:
scanf( "%c", ch1 );
scanf( "%c", ch2 );
scanf( "%c", ch3 );
你输入"ab"后按回车。那么,a被ch1吸收,b被ch2吸收,ch3呢?你是不是以为没有东西吸收?其实你输入ab后按了回车,所以回车被ch3吸收了。这点一定要小心。
你的问题第一种情况就明显很多了。
比如你的scanf语句吸收格式字段是%4f,但是你输入了3.1415926那么,它只会吸收3.14,作为浮点类型。后面的15926以整型的方式存在于缓存中。
学C语言一定要不停的去体悟它的输入输出,个人觉得它的重要性仅次于指针。
scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
main()
{
float grade[5][4]; /*无需赋值*/
int row,colum; /*无需赋值*/
for(row=0;row<5;row++) /*row的极限为5*/
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<4) /*colum的极限为4*/
scanf("%f",&grade[row][colum]);
else
break;
}
printf("All data have got in.\n");
return 0;
}
/*在ANSI中定义的主函数
#include<stdio.h>
#include<conio.h>
int main(void)
{
代码
getch(); /*部份编译器需要加getch()来显示结果*/
return 0;
}
*/
#include<stdio.h>
#include<conio.h> /*getch()语句需要用到的头文件*/
int main(void)
{
float grade[5][4];
int row,colum;
for(row=0;row<5;row++)
{
printf("please input NO.%d's grades(Math/C/Dbase):",row+1);
for(colum=0;;colum++)
if(colum<4)
scanf("%f",&grade[row][colum]);
else
break;
}
printf("All data have got in.\n");
getch();
return 0;
}
这种问题是,没有赋初值时,在你开辟的存储空间
grade[5][4]其存储空间中的值并未初始化(还保留上次计算值)
在进行scanf读入时%f类型与未初始化前类型不一致,导致出错。
赋值初始化后类型一致即可以执行,如果你重启计算机再执行第一个程序
也许就可以了。
不赋初值是在声明,赋初值是在定义。如果只是声明的话,出于于效率上的考虑,编译阶段并没有连接浮点运算库。因此会出错。而定义就不同啦,定义的话,编译器会在自动连接浮点运算库。你可能使用了比较老的编译器吧。
建议你以后这样写main函数:
int main(void)
{
//your code
return 0;
}
或者
int main(int argc, char *argv[])
{
//
return 0;
}
初始化是个好习惯,建议养成
scanf函数的作用是什么?
scanf() 函数是 C 语言中的一个输入函数,它从标准输入设备(通常是键盘)读取数据,并将其存储到变量中。它的原型为:int scanf(const char *format, ...);scanf() 函数会根据 format 参数中的格式字符串,将从标准输入设备中读取的数据转换为相应的数据类型。下面是一些常用的格式控制字符串:d...
c语言中scanf语句的用法及规则
c语言中scanf语句的用法及规则 在C语言中,scanf()函数用于从标准输入(通常是键盘)读取数据,并将其存储到指定的变量中。scanf()函数通常与格式化字符串一起使用,格式化字符串指定了要读取的数据类型和格式。scanf()函数按照格式化字符串中指定的格式读取数据,并将其存储到指定的变量中。scanf()函数的...
c语言scanf()的格式是什么?
在c语言中,scanf("%d%*c", &n);中%d表示读整数,%*c表示忽略掉一个字符型的输入项,&n表示对象n在内存中的地址。scanf("%d%*c", &n);整体表示输入两个数,并且忽略掉第二个字符型的输入项,然后将输入的对象存入n。在C语言的scanf函数中,格式字符串的一般形式为:%[*][输入数据宽度]...
c语言scanf语句
C语言中scanf语句是用于从标准输入读取数据并存储到变量中的函数。scanf函数的基本格式 在C语言中,scanf函数是标准库函数之一,主要用于从输入流读取数据。其基本格式为:c scanf;其中,“格式控制字符串”用于指定输入数据的格式,如%d表示读取整数,%s表示读取字符串等。而“变量列表”则是用于存储输入...
c语言中scanf函数的用法有几种?
选择答案A,因为题目中的A选项“abc”是一个字符串所以说A选项不能够正确的赋值给x变量。所以题目的答案选择的是A选项。选项解析:B选项虽然是一个整形的数,但是可以赋值给x变量,发生了数据类型的转换,C选项输入的是一个字符,那么字符有一个ASCII码值,相当于将‘A’的ASCII码值赋值给x变量。C...
c语言中scanf_s和scanf区别是什么
这使得使用scanf的程序在跨平台兼容性上更好。如果需要在多个平台之间移植代码,使用标准的scanf会更方便。然而,对于那些只在Windows环境下开发的程序来说,选择使用支持更高级安全特性的scanf_s可能会更为合适。需要注意的是,从标准C库的角度来说,C语言并未提供名为scanf_s的函数。因此在不同的编译器...
C语言中的Scanf的用法
C语言中的scanf函数是用于从标准输入流stdin(即键盘)读取数据的重要工具。其基本用法是通过格式字符串指定输入的模式,并将读取的数据存储到相应的变量中,函数原型为int scanf(const char* restrict format,...)。在使用scanf时,格式字符串中的格式说明符决定了如何解析输入内容。这些说明符与输入参数...
c语言中scanf是什么意思(scanf什么时候用c语言)
都作为 有效字符输入 (4)在输入数据时,遇以下情况时认为该数据结束。①遇空格,或按“回车”或“跳格”(Tab)键;②按指定的宽度结束,如“%3d”,只取3列;③遇非法输入。c语言中scanf是什么意思和scanf什么时候用c语言的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
scanf()函数是什么意思?
正确答案是:C 它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。按格式的要求,每个变量前都要有地址符,故s1和s2前面都需要用到地址符&。A、B、D选项中都不能满足s1、s2前面都有&的要求,所以C为正确答案。用软件运行C选项的代码,编译中0个错误,0个警告,验证C答案...
C语言中的scanf是什么意思?
scanf是C语言中的一个输入函数,与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include 。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include 。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数返回成功...
徒侧龙骨: (1)我初学c语言时也碰到了跟你一样的问题, 那是因为scanf函数的一个天生的毛病, 你在调用scanf()时,输入一个数字,并按下回车, 你的本意是只想让scanf接受一个数字, 但同时scanf()把那个回车也送入了缓冲区中, 你可以这样改...
环江毛南族自治县15860202942: C语言关于scanf函数问题?
徒侧龙骨: 第一个问题,因为你的scanf函数使用了域宽来指定读入的格式.所谓域宽,就是说读入的时候把某个宽度内的值付给某变量.那么.你第一个参数读入规则是%3c,意思是设置域宽为3,读入一个char型数据.你输入的是abcde.那么前面的abc将作为第一个参数给一个char型数据.而char型数据只需要一个字符,所以a就给了c1,其间的bc被忽略.后面同理了.第二个问题,楼上大致说明白了.不解释.
环江毛南族自治县15860202942: 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
环江毛南族自治县15860202942: 求问一下关于c语言scanf函数的一些问题,就是说输入数据时,到底应该用什么分割,我们老师说用空格 - ?
徒侧龙骨: scanf的输入方式完全要看代码的书写方式了.先来讲一下scanf的输入原理吧: 1、scanf输入流的概念,当执行到scanf函数时,会检查输入流,如果为空,则要求用户输入.如果不为空,则根据scanf的格式化参数从输入流中读取 2、%d 用来...
环江毛南族自治县15860202942: C语言中关于scanf的问题 - ?
徒侧龙骨: #include"stdio.h" main() { int a; printf("%d",scanf("%d",&a)); // 这个很明显的告诉我们 scanf()返回的并非我们输入的数值,而返回的是输入了几个数字,这里只输入了一个数 所以返回值为1 如果改为 scanf("%d",&a); printf("%d",a); 则是把我们输入的值A存储在内存中,通过printf()语句显示出来 // }
环江毛南族自治县15860202942: c语言关于scanf的小问题 - ?
徒侧龙骨: scanf中%c不会跳过开头的空白字符,因此,需要一个空格来跳过所有空白字符.其实,如果用%d就可以不写这个空白字符,只是数据类型要改一下.
环江毛南族自治县15860202942: c语言有关scanf的一个问题 - ?
徒侧龙骨: 一、scanf是一个格式输入函数,是按格式输入的.所以"%d,%d"是什么样的格式,你就要以什么的格式输入.像这样的scanf("%d,%d",&a,&b);,你就要以3,4这样的格式,中间以逗号隔开,因为你的格式输入中有一个逗号.二、如果中间没任何符号的scanf("%d%d",&a,&b);,就应该以空格,可以是多个空格或者tap、回车隔开两个输入数据.三、scanf("%d",&a);scanf("%d",&b);就是最简单的格式输入,
环江毛南族自治县15860202942: C的scanf()函数使用问题! - ?
徒侧龙骨: scanf("%c,%f\n",&c,&d); 你这里错了,scanf函数里不能加\n scanf("%c,%f",&c,&d); 输入1,2A,5.5就可以得到结果 如果将两个scanf的内容写到一起回更好些
环江毛南族自治县15860202942: 有关C语言scanf的问题 - ?
徒侧龙骨: 应该是:scanf("%d%c%d%c“,&a1,&c1,&a2,&c2);%d是要跳过空白符的,而%c是不跳过空白符的 空白符包括空格,横向制表符,换行符,回车符,纵向制表符和换页符.所以要使c1=x,c2=y,那么在x,y之前不应该出现任何空白符,而10和20之前就无所谓了 符合上面条件的只有D,所以正确答案应该是D
环江毛南族自治县15860202942: c语言scanf问题! - ?
徒侧龙骨: 这个说的结束,意思就是这一个数据的结束.而不是一个录入的结束. 比如你输入“19 20 21 22”之后回车, 电脑会读入19,然后有空格,记录完成,继续读下一个数据20;之后以此类推