C语言学习(三)

一、数组、循环、判断条件

 

 

#include<stdio.h>
int main(){
    int a =100;
    int b =200;
    int i;
    int arr [5];
    if (a==100){
        if (b==200){
           printf("a 的值是 100,且 b 的值是 200\n" );
        }
        printf("a 的值是 100,且 b 的值是 %d \n",b );
    }else{
        printf("a 的值是 %d \n",a );
    }

    //数组
    for(i=0;i<5;i++){
       arr[i]=100+i;
    }
    printf("arr[4] 的值是 %d \n",arr[4]);
    return 0;
}

 

 

二、枚举:枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读

案例:如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:

#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
 
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5

#include <stdio.h>
enum DAY{
 M,T,W,TH,F,SA,SU
};

int main()
{
    enum DAY day;
    day = W;
    printf("%d \n",day);
    return 0;
}

 

 

/*linux socket AF_INET  UDP 编程示例,客户端,单进程单线程。*/
#include <cstdio>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    int cli_sock = socket(AF_INET, SOCK_DGRAM, 0);
    
    //conn_addr 是要连接的服务器地址结构
    struct sockaddr_in conn_addr;
    conn_addr.sin_family = AF_INET;
    conn_addr.sin_port = htons(8345);
    //conn_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    //将 inet_addr() 改用 inet_pton() 这个现代的方法,支持 IPV4 和 IPV6
    if (inet_pton(AF_INET, "127.0.0.1", &conn_addr.sin_addr) == -1) {
        printf("inet_pton error\n");
        close(cli_sock);
        return 0;
    }
    
    //serv_addr 是用来存储 recvfrom 中的地址结构
    struct sockaddr_in serv_addr;
    socklen_t serv_addr_len = sizeof(serv_addr);
    
    char c = 1, buf[255];
    int num = 0;
    while (c < 100) {
        sendto(cli_sock, &c, sizeof(c), 0,
               (struct sockaddr*)&conn_addr,
               sizeof(conn_addr) );
        int n = recvfrom(cli_sock, buf, sizeof(buf), 0,
                         (struct sockaddr*)&serv_addr,
                         &serv_addr_len );
                         
        if (n > 0) {
            num++;            
            //将 inet_ntoa() 改用 inet_ntop() 这个现代方法,支持 IPV4 和 IPV6
            //printf("recv data from %s : %d  %c\n", inet_ntoa(serv_addr.sin_addr), ntohs(serv_addr.sin_port), buf[0]);
            //INET_ADDRSTRLEN 是标识 IPV4 地址展现字符串的大小常量,INET6_ADDRSTRLEN是 IPV6 的
            char serv_ip[INET_ADDRSTRLEN];
            if (inet_ntop(AF_INET, &serv_addr.sin_addr, serv_ip, sizeof(serv_ip)) == NULL) {
                printf("inet_ntop error\n");
                close(cli_sock);
                return 0;
            }
            printf("recv data from %s : %d  %c\n", serv_ip, ntohs(serv_addr.sin_port), buf[0]);
        }
        ++c;
    }
    c='\0';
    sendto(cli_sock, &c, sizeof(c), 0,
           (struct sockaddr*)&conn_addr,
           sizeof(conn_addr) );
    close(cli_sock);
    printf("\nnum : %d\n", num);
    return 0;
}

 

posted @ 2021-07-29 23:52  何双新  阅读(51)  评论(0编辑  收藏  举报