scanf读入string("%s", string[i],101); c语言怎么还能这么写,非常感谢

c语言获取用户输入字符串是scanf和gets的区别
我的图书馆
c语言获取用户输入字符串是scanf和gets的区别
gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
所在头文件:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",字符数组名或指针);
所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
2.相同点:
字符串接受结束后自动加'\0'。
#include &stdio.h&int main(){  char ch1[10],ch2[10];  scanf("%s",ch1);  gets(ch2);
return 0;}
依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd fg\0"。
程序2:#include &stdio.h&int main(){char str1[20], str2[20];scanf("%s",str1);printf("%s\n",str1); scanf("%s",str2);printf("%s\n",str2);return 0;}程序的功能是读入一个字符串输出,再读入一个字符串输出。可我们会发现输入的字符串中不能出现空格,例如:测试一输入:Hello word(enter)输出:Helloworld!
程序3:#include &stdio.h&int main(){char str1[20], str2[20];gets(str1);printf("%s\n",str1); gets(str2);printf("%s\n",str2);return 0;}测试:Helloworld! [输入]Helloworld! [输出]12345 [输入]12345 [输出]【分析】显然与上一个程序的执行情况不同,这次程序执行了两次从键盘的读入,而且第一个字符串取了Helloworld! 接受了空格符,而没有像上一个程序那样分成了两个字符串!所以如果要读入一个带空格符的字符串时因该用gets(), 而不宜用scanf()!
TA的最新馆藏[转]&[转]&[转]&
喜欢该文的人也喜欢C语言输入一个任意位数的正整数&不超过int范围&&求其各位数的和
#include #include int main(){ string strI cin >> strI cout 再问: #include void main() { int x,y,i=1; scanf("%d",&x); while(x>0) { y
团队 俊狼猎英 #includint main(){int a[10];int i ,int b ,k=100000;cin >>for(i=1;i 再问: 这个程序有好多错误呀,请用数组的知识编程 再答: 编译没错误= =OJ模式网上提交的话要删掉system(
#include #include int main(void){\x09char a[20];\x09printf("请输入数字");\x09scanf("%s",a);\x09printf("%c",a[0]); }最简单的了吧 再问: 额。。这个是用到数组了吧?我才开始学C语言,数组还不懂,可以不用数组解决不?
#include#includeint main(){int i,num,n,ans,while(scanf("%d",&num)!=EOF){ans=0;n=3;//如果要求N位数反转,把n改了就好了while(n!=0){tt=num%10;num/=10;ans+=tt*pow((double)(10),(
#include void main( ){int a,b,c,d;scanf("%d",&a);b= a/100;c= (a%100) /10;d=a%10;printf("%d",100*d+10*c+b); }
#includemain(){int n,i,s=0,sum=0;printf("请输入一个整数:");scanf("%d",&n);i=n;while(i!=0){s+=(i%10)*(i%10)*(i%10);i/=10;sum++;}printf("是%d位数,各位立方和为%d\n",sum,s);}
#include int main(void){int y,i=1;printf("请输入一个不超过100000的整数:"); // 99999||x
因为要求从高位输出,第一个循环求出输入得数多少位,并用power保存相关信息(如:输入1,power=1,输入123,power=100,输入1234,power=10000,输入12345,power=10000).循环结束后还要再&power=power/10;//因为循环将这个数为一位数的时候多成了10
#include "stdio.h"void main(){ int Num = 0; printf("请输入数字:"); scanf("%d",&Num); int Array[100]; int n_Num = 0;//记录整数的位数 int n_mod = 0;//模值 while(Num) { Array[n_
#include#define error -1int atoi(char c)void main(){char a[20];printf("input number:");scanf("%s",a);int sum =0 ;for(char *c=a; *c != '\0'; c++){sum = atoi(*c)
#include void main(){int n,m=1,i,j;printf("请输入一个正整数:");scanf("%d",&n);i=n,j=n;while(i>0){m*=i;i=i-1;}printf("它的阶乘为:%d",m);m=1;do{m*=j;j=j-1;
#include int main(){\x05int i,k=0;\x05for(scanf("%d",&i); i=i/10)\x05\x05k++;\x05printf("是%d位数",k);\x05\x05} 再问: 麻烦解释一下 再答: #include int main() { int i, k=0;
#include int main(){\x05//\x05printf("请输入一个十位数:");\x05scanf("%d",&n);\x05printf("%d",n%10+n/10);}
使用了数组的动态分配,看不懂的话我还有其他方案 #include #include bool prime(int num) { bool flag= if(num
#includeint main(){int m[10],i,j=0,k;scanf("%ld",&n);k=n;while(k>0){k/=10;j++;}i=j;while(i--){m[i]=n%10;n/=10;}while(j--)printf("%d",m[j]);}#include #inc
设此数为a,和为ss=0;{s+=a%10;a/=10;}循环3次即可
#include void main(){int i,j,k,m,n;printf("input a number:\n");scanf("%d",&n);i=n/1000;j=(n%;k=(n%100)/10;m=n%10;printf("the result is:\n");printf("%d
#include int main(){/*注意n不能太大,否则会溢出*/ scanf("%d",&n); double e=0; int h=1;/*分母*//*计数器*/ for(i=1;i
#includeint mat[10][10];void main(){int n,i,j;int ok=1;scanf("%d",&n);for(i=0;i
#include int main(void){int ge,shi,scanf("%d",&a);ge=a%10;shi=a/10%10;bai=a/100;printf("%d\n",ge*100+shi*10+bai);return 0;} 再问: 就这么几步 确定对? 再答: 你说的交换三位浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
转载 & & 作者:
以下是对C语言中printf(),sprintf(),scanf(),sscanf()的用法以及区别进行了详细的分析介绍,需要的朋友可以参考下
printf语法: #include &stdio.h&int printf( const char *format, ... );printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中。返回值是输出的字符数量。sprintf语法: #include &stdio.h&int sprintf( char *buffer, const char *format, ... );sprintf()函数和printf()类似,格式控制完全一样,只要是printf使用的格式化字符串,在sprintf都可以使用,只是把输出发送到buffer(缓冲区)中。返回值是写入的字符数量。
功能一:格式化数字字符串 sprintf(s, "%-8X", 12345); //s变成:“12345&& ”大写的“X”代表,16进制大写形式,宽度占8 个位置,“-”代表左对齐 。
功能二:控制浮点数打印格式 浮点数使用格式符”%f”控制,默认保留小数点后6 位数字 %m.nf”格式,其中m 表示打印的宽度,n 表示小数点后的位数 sprintf(s, "%10.3f", 3.1415626); //s变成:"&&&&& 3.142"
功能三:连接两个字符串 直接连接:char dest[256];char src1[] = {'a','b','c','d','e'};char src2[] ={'1','2','3','4'};sprintf(dest,"%.5s%.4s",src1,src2); //output:“abcde1234”
截取字符串的某一些字符进行连接,char dest[256];char src1[] = {'a','b','c','d','e'};char src2[] ={'1','2','3','4'};sprintf(dest,"%.*s%.*s",2,src1,3,src2); //output:“ab123”
功能四:字符/Ascii 码对照我们知道,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII 字符。以下程序段把所有可见字符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):for(int i = 32; i & 127; i++) {&&& printf("[ %c ]: %3d 0x%#04X\n", i, i, i);}
功能五:打印地址信息 有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:sprintf(s, "%u", &i);不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:sprintf(s, "%08X", &i);然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:sprintf(s, "%p", &i);我觉得它实际上就相当于:sprintf(s, "%0*x", 2 * sizeof(void *), &i);
功能六:利用返回值printf与sprintf的返回值是写入的字符数量。也就是说每当一次sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度。如:int len = sprintf(s, "%d", i); scanf语法: & #include &stdio.h&& int scanf( const char *format, ... );scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数.sscanf语法: & #include &stdio.h&& int sscanf( const char *buffer, const char *format, ... );函数sscanf()和scanf()类似, 只是输入从buffer(缓冲区)中读取.sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源用法:%[ ]表示要读入一个字符集合, 如果[ 后面第一个字符是”^”,则表示反意思。[ ]内的字符串可以是1或更多字符组成。空字符集(%[])是违反规定的,可导致不可预知的结果。%[^]也是违反规定的。%[a-z] 读取在 a-z 之间的字符串,如果不在此之前则停止,如char s[]="hello, my friend” ; // 注意: ,逗号在不 a-z之间sscanf( s, “%[a-z]”, string ) ; // string=hello
%[^a-z] 读取不在 a-z 之间的字符串,如果碰到a-z之间的字符则停止,如char s[]="HELLOkitty” ; // 注意: ,逗号在不 a-z之间sscanf( s, “%[^a-z]”, string ) ; // string=HELLO
%*[^=] 前面带 * 号表示不保存变量。跳过符合条件的字符串。char s[]="notepad=1.0.0.1001" ;char szfilename [32] = "" ;int i = sscanf( s, "%*[^=]", szfilename ) ;// szfilename=NULL,因为没保存intj = sscanf( s, "%*[^=]=%s", szfilename ) ;// szfilename=1.0.0.1001
%40c 读取40个字符%[^=] 读取字符串直到碰到'='号,'^'后面可以带更多字符,如:char s[]="notepad=1.0.0.1001" ;char szfilename [32] = "" ;int i = sscanf( s, "%[^=]", szfilename ) ;&&&&&&&&&& // szfilename=notepad 如果参数格式是:%[^=:] ,那么也可以从 notepad:1.0.0.1001读取notepad
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具求c语言编程求两个正整数的最大公约数和最小公倍数?
求c语言编程求两个正整数的最大公约数和最小公倍数?
09-12-28 &
在后面一列中,输入=if(b1&0,b1,0),然后拖动该单元格右下角的小黑十字,这样就可以根据输入的数据判断,如果&=0,则显示0,否则显示数值
请登录后再发表评论!
最大公约数:Int maxcommondivisor(int n, int m)           // 12,20 {    while (m)                                        //  while(20)      {
        int temp =                              //  temp = 20         m = n %             //  m = 12%20 = 8 :m 还不是0,继续下次循环。直到m = n%m =0,则n 即为最大公约数。参见“辗转相除法&         n  =       }  }
请登录后再发表评论!
【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf(&\n&); for(i=1;i&5;i++) /*以下为三重循环*/ for(j=1;j&5;j++) for (k=1;k&5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf(&%d,%d,%d\n&,i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { int bonus1,bonus2,bonus4,bonus6,bonus10, scanf(&%ld&,&i); bonus1=.1;bonus2=bonus1+.75; bonus4=bonus2+.5; bonus6=bonus4+.3; bonus10=bonus6+.15; if(i&=100000) bonus=i*0.1; else if(i&=200000) bonus=bonus1+(i-.075; else if(i&=400000) bonus=bonus2+(i-.05; else if(i&=600000) bonus=bonus4+(i-.03; else if(i&=1000000) bonus=bonus6+(i-.015; else bonus=bonus10+(i-.01; printf(&bonus=%d&,bonus); } ============================================================== 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: #include &math.h& main() { long int i,x,y,z; for (i=1;i&100000;i++) { x=sqrt(i+100); /*x为加上100后开方后的结果*/ y=sqrt(i+268); /*y为再加上168后开方后的结果*/ if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ printf(&\n%ld\n&,i); } } ============================================================== 【程序4】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。 2.程序源代码: main() { int day,month,year,sum, printf(&\nplease input year,month,day\n&); scanf(&%d,%d,%d&,&year,&month,&day); switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0; case 2:sum=31; case 3:sum=59; case 4:sum=90; case 5:sum=120; case 6:sum=151; case 7:sum=181; case 8:sum=212; case 9:sum=243; case 10:sum=273; case 11:sum=304; case 12:sum=334; default:printf(&data error&); } sum=sum+ /*再加上某天的天数*/ if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ leap=1; else leap=0; if(leap==1&&month&2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf(&It is the %dth day.&,sum);} ============================================================== 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x&y则将x与y的值进行交换, 然后再用x与z进行比较,如果x&z则将x与z的值进行交换,这样能使x最小。 2.程序源代码: main() { int x,y,z,t; scanf(&%d%d%d&,&x,&y,&z); if (x&y) {t=x;x=y;y=t;} /*交换x,y的值*/ if(x&z) {t=z;z=x;x=t;}/*交换x,z的值*/ if(y&z) {t=y;y=z;z=t;}/*交换z,y的值*/ printf(&small to big: %d %d %d\n&,x,y,z); } ============================================================== 【程序6】 题目:用*号输出字母C的图案。 1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 2.程序源代码: #include &stdio.h& main() { printf(&Hello C-world!\n&); printf(& ****\n&); printf(& *\n&); printf(& * \n&); printf(& ****\n&); } ============================================================== 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个。不同字符,图形不一样。 2.程序源代码: #include &stdio.h& main() { char a=176,b=219; printf(&%c%c%c%c%c\n&,b,a,a,a,b); printf(&%c%c%c%c%c\n&,a,b,a,b,a); printf(&%c%c%c%c%c\n&,a,a,b,a,a); printf(&%c%c%c%c%c\n&,a,b,a,b,a); printf(&%c%c%c%c%c\n&,b,a,a,a,b);} ============================================================== 【程序8】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2.程序源代码: #include &stdio.h& main() { int i,j, printf(&\n&); for (i=1;i&10;i++) { for(j=1;j&10;j++) { result=i*j; printf(&%d*%d=%-3d&,i,j,result);/*-3d表示左对齐,占3位*/ } printf(&\n&);/*每一行后换行*/ } } ============================================================== 【程序9】 题目:要求输出国际象棋棋盘。 1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 2.程序源代码: #include &stdio.h& main() { int i,j; for(i=0;i&8;i++) { for(j=0;j&8;j++) if((i+j)%2==0) printf(&%c%c&,219,219); else printf(& &); printf(&\n&); } } ============================================================== 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 2.程序源代码: #include &stdio.h& main() { int i,j; printf(&\1\1\n&);/*输出两个笑脸*/ for(i=1;i&11;i++) { for(j=1;j&=i;j++) printf(&%c%c&,219,219); printf(&\n&); } } 【程序11】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() { long f1,f2; f1=f2=1; for(i=1;i&=20;i++) { printf(&%12ld %12ld&,f1,f2); if(i%2==0) printf(&\n&);/*控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ } } ============================================================== 【程序12】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: #include &math.h& main() { int m,i,k,h=0,leap=1; printf(&\n&); for(m=101;m&=200;m++) { k=sqrt(m+1); for(i=2;i&=k;i++) if(m%i==0) {leap=0;} if(leap) {printf(&%-4d&,m);h++; if(h%10==0) printf(&\n&); } leap=1; } printf(&\nThe total is %d&,h); } ============================================================== 【程序13】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 2.程序源代码: main() { int i,j,k,n; printf(&'water flower'number is:&); for(n=100;n&1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf(&%-5d&,n); } } printf(&\n&); } ============================================================== 【程序14】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n&&k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 2.程序源代码: /* zheng int is divided yinshu*/ main() { int n,i; printf(&\nplease input a number:\n&); scanf(&%d&,&n); printf(&%d=&,n); for(i=2;i&=n;i++) { while(n!=i) { if(n%i==0) { printf(&%d*&,i); n=n/i; } } } printf(&%d&,n);} ============================================================== 【程序15】 题目:利用条件运算符的嵌套来完成此题:学习成绩&=90分的同学用A表示,60-89分之间的用B表示, 60分以下的用C表示。 1.程序分析:(a&b)?a:b这是条件运算符的基本例子。 2.程序源代码: main() { printf(&please input a score\n&); scanf(&%d&,&score); grade=score&=90?'A':(score&=60?'B':'C'); printf(&%d belongs to %c&,score,grade); } ============================================================== 【程序16】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 2.程序源代码: main() { int a,b,num1,num2, printf(&please input two numbers:\n&); scanf(&%d,%d&,&num1,&num2); if(num1 { temp=num1; num1=num2; num2= } a=num1;b=num2; while(b!=0)/*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b= } printf(&gongyueshu:%d\n&,a); printf(&gongbeishu:%d\n&,num1*num2/a); } ============================================================== 【程序17】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 2.程序源代码: #include &stdio.h& main() { int letters=0,space=0,digit=0,others=0; printf(&please input some characters\n&); while((c=getchar())!='\n') { if(c&='a'&&c&='z'||c&='A'&&c&='Z') letters++; else if(c==' ') space++; else if(c&='0'&&c&='9') digit++; else others++; } printf(&all in all:char=%d space=%d digit=%d others=%d\n&,letters, space,digit,others); } ============================================================== 【程序18】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+(此时 共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 2.程序源代码: main() { int a,n,count=1; long int sn=0,tn=0; printf(&please input a and n\n&); scanf(&%d,%d&,&a,&n); printf(&a=%d,n=%d\n&,a,n); while(count&=n) { tn=tn+a; sn=sn+ a=a*10; ++ } printf(&a+aa+...=%ld\n&,sn); } ============================================================== 【程序19】 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 找出1000以内的所有完数。 1. 程序分析:请参照程序&--上页程序14. 2.程序源代码: main() { static int k[10]; int i,j,n,s; for(j=2;j&1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf(&%d is a wanshu&,j); for(i=0;i printf(&%d,&,k[i]); printf(&%d\n&,k[n]); } } } ============================================================== 【程序20】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 1.程序分析:见下面注释 2.程序源代码: main() { float sn=100.0,hn=sn/2; for(n=2;n&=10;n++) { sn=sn+2*/*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf(&the total of road is %f\n&,sn); printf(&the tenth is %f meter\n&,hn); } 我不知道你邮箱,我发给你
请登录后再发表评论!
int a=10, b=20;int min = a & b? a:int max = a & b? a:int i = min-1;for(; i& i--){  if(min % i== 0 && max % i == 0){    //最大公约数      }}if(i == 1){ //没有}i = max+1;for(; ; i++){  if(i % min == 0 && i % max == 0){    //最小公倍数  }}
请登录后再发表评论!博客分类:
输入是一整行的字符串的
char buf[20];
gets(buf);
如果用来保存:
getline( cin , buf );
如果用char buf[ 255 ]; 来保存:
cin.getline( buf, 255 );
scanf("%s%s",str1,str2),在多个字符串之间用一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
cin.getline的用法:
getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下:
istream& getline(char line[], int size, char endchar = '\n');
不用管它的返回类型,来关心它的三个参数:
char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。
int size : 最多接受几个字符?用户超过size的输入都将不被接受。
char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。
结合后两个参数,getline可以方便地实现: 用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。
char name[4];
cin.getline(name,4,'\n');
由于 endchar 默认已经是 '\n',所以后面那行也可以写成:
cin.getline(name,4);
C语言字符串输出
在采用字符串方式后,字符数组的输入输出将变得简单方便。除了上述用字符串赋初值的办法外,
还可用scanf函数和printf函数一次性输入输出一个字符数组中的字符串,而不必使用循环语句逐个输入输出每个字符。
要输出一个字符串需要在printf函数的格式描述串中使用转换字符串“%s”,表示输出的是一个字符串。如:
char name[]="Hello world";
printf("%s\n",name);
在printf语句中使用了转换字符串“%s”,因此输出参数中只给出数组名即可。同样,要输入一个字符串也要加转换字符串“%s”。如:
char name[15];
printf("请输入姓名:\n");
scanf("%s",name);
printf("%s",name);
由于定义数组name的长度为15,因此输入的字符串长度必须小于15,以留出1字节用于存放字符串结束标示'\0'。 对一个字符数组,如果不作初始化赋值,则必须说明数组长度。然而,scanf()语句在按下回车键前都将接收字符。 按下回车键后,scanf()在字符串末尾插入一个空字符'\0'以标示字符串结束。因此,如果键入25个字符后再按下回车键, 尽管字符串声明为仅由15个字符构成,它仍将接收并存储字符。因此,对字符串使用scanf()时, 必须注意输入字符串长度不能超过声明字符串时指定的大小。这是因为输入多余字符后, 编译器也不会发出任何错误提示或警告,这些字符甚至被接收并存储在内存中,造成程序隐患。 scanf()语句不允许在输入中存在空白字符。例如,当用scanf()接收字符串时,键入“Liu De Hua"后, 只有“Liu”被存储在内存中,而空格字符后的其他剩余字符将被丢弃。要克服这个问题,C语言中提供了gets()和puts()函数 分别用于字符串的输入和输出。
puts函数的格式为:
puts (字符数组名);
功能:把字符数组中的字符串输出到显示器。即在屏幕上显示该字符串。
gets函数的格式为:
gets (字符数组名);
功能:从标准输入键盘上读入一个完整的行(从标准输入读,一直读到遇到换行符), 把读到的内容存入括号中指定的字符数组里。并用空字符'\0'取代行尾的换行符'\n'。gets()函数允许在字符串中间包含空格。
浏览: 236623 次
来自: 宁波
浏览量:10083
muzeng 写道非常感谢,比淘宝的还全,向学长学习,谢谢哈哈 ...
非常感谢,比淘宝的还全,向学长学习,谢谢
tianxia2s 写道 求楼主给个选择题答案不不好意思,博客 ...
求楼主给个选择题答案不
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 scanf输入string 的文章

 

随机推荐