Linux C 第四课

一、字符串的输入与输出
1.保存字符串要用数组
2.‘0’即‘\0’
3.C语言自定了函数 atoi();功能:将数字字符串转化成相应的数字;遇到非数字的字符即停止;可以判断正负
4.将数字字符转化成相应的数字 :str[i] - ‘0’;(str[] 是保存字符串的数组)
5.数字转换成相应字符串的方法:num + ‘0’
6.获取字符串的三种方法

 #include<stdio.h>

int main()
{
    int i = 0;
    char src[100];
    char ch;

    //方法一scanf();这种方法有缺陷,即只能获取不带 空格的字符串
    printf("请输入一个字符串:\n");
    scanf("%s",src);    
    //可以改进scanf("%[^\n]",src); 
    //%[^EOF]可以控制输入到EOF的时候停止
    printf("scr = %s\n",src);

    getchar(); 
    //此处添加getchar();上次输入带来的'\n'垃圾值

    //方法二gets();可以获得句子字符串
    //危险函数,使用gets可以无限输入
    printf("请输入一个字符串:\n");
    gets(src);
    printf("src = %s\n",src);


    //方法三getchar();
    //使用getchar();可以一个字符一个字符的输入
    //当字符串超出规定长度,报错,自动截取
    printf("请输入一个字符串:\n");
    while((ch = getchar()) != '\n')
    {
        src[i] = ch;
        i++;
        if(i == 9)//字符串规定长度为9
        {
            printf("error!");
            break;
        }
    }
    src[i] = '\0';
    printf("src = %s\n",src);
    return 0;
}

6.实例:将字符串转化成对应的整数,要求模仿C语言自带函数atoi的功能

//实现将字符串转化成对应的数字

#include<stdio.h>
#include<string.h>
#define MAX_SIZE 100

int my_atoi(char *str)
{
    int i = 0;
    int flag = 1;
    int result = 0;
    int len;

    len = strlen(str);

    //处理字符串的首个字符为'-'的问题
    if(str[0] == '-')
    {
        flag = -1;
        i = 1;
    }

    for(;i < len;i++)
    {
        if((str[i] >= '0' && str[i] <= '9'))
        {
            result = result * 10 + (str[i] - '0');
        }
        else  //当遇到的字符不是数符的时候,停止循环
        {
            break;
        }
    }
    return result * flag;
}
int main()
{
    char str[MAX_SIZE];
    int result;
    printf("please enter a string:\n");
    scanf("%s",str);

    printf("str = %s\n",str);

    result = my_atoi(str);
    printf("result = %d\n",result);

    return 0;

}

二、格式化输入
1.格式化就是按照scanf中给定的格式输入,否则就会出错
2.%d 整型
%c 字符型
%f float型
%lf double型
%s 字符串型
%p 地址
三、数组的输入输出
1.数组名:代表数组的地址,是常量,不可以进行自加自减
2.数组首元素的地址代表数组的地址
3.数组输入输出的方式
4.int *p = a;(a是数组名)//p是变量可以进行自加自减

//数组的输入输出

#include<stdio.h>

int main()
{
    int i;
    int a[3];
    int *p = a;

    printf("输入数组的值:\n");
    for(i = 0;i < 3;i++)
    {
        scanf("%d",&a[i]);
        //scanf("%d",a + i);
        //scanf("%d",p++);
    }
    printf("输出数组的值:\n");
    for(i = 0;i < 3;i++)
    {
        printf("a[%d] = %d\n",i,*(a + i));
        //printf("a[%d] = %d\n",i,a[i]);
        //printf("a[%d] = %d\n",i,*p));p++;

    }

    return 0;
}

四、printf的注意事项
1.printf是行缓冲,最后要加 ‘\n’ 才能输出
2.scanf 与 printf 使用的是同一个缓冲区,所以当printf后面有scanf时也可以输出
3.程序执行完成后要清理缓冲区

☆ 程序中要返回局部变量地址时,加static 以防止出错

五、i++ & ++i
1.i++是使用完(遇到结束标志),再自加一
2.++i是先加一,再使用
3.例:
i = 2;
num = (i++)+(i++)+(i++)+(i++);
//num = 8 i = 6
num = (++i)+(++i)+(++i)+(++i);
//num = 19 i = 6
4.函数是从右边开始传参,且;,( 都是结束标志
规律:++i,被替换成变量名i
i++,被替换成数值
变量名i,依然是i
f(++i,++i,i++,++i,i++);
//7,7,4,7,2
f(i++,++i,i,i++,++i);
//5,6,6,3,6

你可能感兴趣的:(linux,C语言)