1.如何把“123”输出123,“1234567”输出1234567.
提示:“123” ’1’-’0’=1 ‘2’-’0’=2 1*100+2*10+3*1=123
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1024
int main()
{
int result=0;
int i=0;
int len=0;
int flag=1;
char src[MAX_SIZE] = {0};
printf("please imput the string:\n");
scanf("%s",src);
len=strlen(src);
if(src[0] =='-')
{
flag = -1;
}
for(i=0;i<len;i++)
{
if((src[i] >= '0')&&(src[i] <= '9'))
{
result = result*10+(src[i]-'0');
}
}
result=result*flag;
printf("%d\n",result);
return 0;
}
atoi:将字符串变换车成相应的数字。遇到字符串停止。
上题也可以建立函数,进行调用
int my_atoi(char *src)
int flag=1;
int result=0;
if(*src =='-')
{
flag = -1;
src++;
}
while(*src!=’\0’)
{
if(*src >= '0'&&*src <= '9')
{
result = result*10+(*src-'0');
}
else
{
break;
}
src++;
}
return result*flag;
读取一个小于10位的字符串。
#include<stdio.h>
int main()
{
char ch;
char src[100];
int i=0;
while((ch=getchar())!='\n')
{
src[i]=ch;
i++;
if(i==10)
{
printf("error!\n");
exit(1);
}
}
src[i]='\0';
printf("src=%s\n",src);
return 0;
}
读一个有三个元素的数组。
#include<stdio.h>
int main()
{
int i;
int a[3];
for(i=0;i<3;i++)
{
scanf("%d",a+i); //scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,*(a+i)); // printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
方式2:
#include<stdio.h>
int main()
{
int i;
int a[3];
int *p=a;
for(i=0;i<3;i++)
{
scanf("%d",p++);
}
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,*(p+i));
}
return 0;
}
2.如何把123输出“123”,1234567输出“1234567”.
提示:
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1024
char *my_bianhuan(int num)
{
char temp;
int len=0;
int i=0;
static char result[MAX_SIZE]={0};
while(num!=0)
{
result[i]=(num%10)+'0'; 注释:先取余,再除10
num=num/10;
i++;
}
result[i]='\0';
len=strlen(result);
for(i=0;i<len/2;i++)
{
temp=result[i]; 注释:倒叙函数
result[i]=result[len-1-i];
result[len-1-i]=temp;
}
return result;
}
int main()
{
int num;
printf("please input the numbers:\n");
scanf("%d",&num);
char *result=my_bianhuan(num);
printf("result=%s\n",result);
return 0;
}
scanf格式化输入
不让输,用getchar
举例:scanf(“%d”,&a);
getchar()
scanf(“%s”,&b);
否则第二个scanf读取不了。
gets没有缓冲区。
1.scanf:一条语句可输入多个数据。
默认以空格来跳到下一个输入变量,若完成了本次调用时用户本次规定的输入量,可以缓冲起来,继续输入下一次调用该函数时的数据,发出执行指令后做一起处理。该函数不接收空格,多个空格等同一个空格。可以在一次规定的变量之间加上其他的符号来自定义跳转指令。
若完成了本次规定的输入量,回车表示执行本次要的操作;若未完成本次规定的输入量,则作用同于空格,是跳到下一个输入变量。该函数也不接收回车,多个回车等同一个回车。
故而要注意该函数只能正常接收无空格和字符串,当然含有回车符的字符串也是不行的。
2.gets:输入的对象是字符串,会把一切能接收进来的字符都接收进来(除了回车),如下面代码1中scanf()后面的空格和回车,以回车表示结束该字符串的输入结束。常以防干扰以代码2的形式和scanf();搭配。但是注意一切能接收是指上一个输入变量不要的字符,如上面的空格和回车,但是形如代码3,上一个回车是上一个字符串必要的结尾符,不能给下一个字符接收了。
3.getchar():输入字符的函数,一次输入单个字符,可以接收任意形式的字符,可以把它付给一个字符变量,也可以不要接收器。若要用来输入字符串,则可以用EOF来结尾,形式是while((c=getchar())!=EOF)
printf 行缓冲
scanf与printf用的是同一个缓冲区
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下:
1 缓冲区填满
2 写入的字符中有‘\n’ '\r'
3 调用fflush手动刷新缓冲区
4 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新
c语言中如何让输入的密码用 * *****表示?
char pass[20];
for(i=0;i<20;i++)
{
pass[i]=getchar();
if(pass[i]=='\r') break;
putchar('*');
}
i++先使用后运算 使用完毕之后。结算运算符为①;② , ③ 函数()
++i先运算后使用 先自加后使用。
i=2;
num=(++i)+(++i)+(++i)+(++i)
num=4+4+5+6
结果为19。两个才能构成一个运算。
++i被替换为变量名,i++被替换为数值。
++i被替换为变量名,i++被替换为数值。