//这个例子证明了:scanf("%c", &ch)等价于ch = getchar()
//在用%c的时候要格外小心
//int型:正确
#include <stdio.h>
int main()
{
    int i;
    int var1, var2;
    for(i=0 ; i<10; i++)
    {
        scanf("%d%d",&var1, &var2);
        printf("i = %d\n", i);
    }
    return 0;
}
//char型:错误
#include <stdio.h>
int main()
{
    int i;
    char var1, var2;
    for(i=0 ; i<6; i++)
    {
        scanf("%c%c",&var1, &var2);
        //scanf("%c %c",&var1, &var2);
        printf("var1 = %d, var2 = %d\n", var1, var2);
        printf("i = %d\n", i);
    }
    return 0;
}
/*
有空格时的运行结果:
a b
var1 = 97, var2 = 98
i = 0
c d
var1 = 10, var2 = 99
i = 1
var1 = 32, var2 = 100
i = 2
e f
var1 = 10, var2 = 101
i = 3
var1 = 32, var2 = 102
i = 4
g h
var1 = 10, var2 = 103
i = 5
没空格时的运行结果:
a b
var1 = 97, var2 = 32
i = 0
var1 = 98, var2 = 10
i = 1
c d
var1 = 99, var2 = 32
i = 2
var1 = 100, var2 = 10
i = 3
e f
var1 = 101, var2 = 32
i = 4
var1 = 102, var2 = 10
i = 5
*/
//char型:解决
#include <stdio.h>
int main()
{
    int i;
    char var1, var2;
    for(i=0 ; i<6; i++)
    {
        scanf("%c%*c%c", &var1, &var2);//这样空格、Tab键都可以成为分隔符了
        getchar();//吸掉'\n'
        printf("var1 = %d, var2 = %d\n", var1, var2);
        printf("i = %d\n", i);
    }
    return 0;
}

//再看一个例子,注意①②③④处
#include <stdio.h>
#define MAX_VERTEX_NUM 20
#define INFINITY 0x00ffffff
typedef char VertexDataType;//顶点数据类型
typedef char *OtherInfo;//弧结点的其它信息
enum GraphKind{DG,DN,UDG,UDN};//directed graph,directed net,undirected graph,undirected net
typedef struct
{
    int edge;//对于无权图,1、0表示是否相邻;对于带权图,为权值
    OtherInfo info;
}ArcNode;//弧节点
typedef struct
{
    int verNum;//vertex number
    int arcNum;//arc number
    VertexDataType verList[MAX_VERTEX_NUM];//顶点列表
    ArcNode arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
    enum GraphKind kind;
}AdjMatrix;//adjacency matrix(邻接矩阵)
void createDN(AdjMatrix *G);

//邻接矩阵表示有向网
int main(void)
{
    AdjMatrix G;
    createDN(&G);
    printf("create successfully!\n");

    return 0;
}
//locate the index of the vertex
int locateVer(AdjMatrix *G, const VertexDataType *ver)
{
    int i;
    for(i = 0; i < G->verNum; i++)
    {
        if(G->verList[i] == *ver)
        {
            break;
        }
    }
    return i;
}
//create directed net
void createDN(AdjMatrix *G)
{
    int i, j;
    VertexDataType v1, v2;
    int weight;
    printf("请输入顶点个数、弧的个数:");
    scanf("%d%d", &(G->verNum), &(G->arcNum));
    getchar();//①
    printf("请输入顶点元素:");
    for(i = 0; i < G->verNum; i++)
    {
        scanf("%c", G->verList+i);
        getchar();//②
    }
    for(i = 0; i < G->verNum; i++)
    {
        printf("%d ", G->verList[i]);
    }
    printf("\n");
    //初始化邻接矩阵
    for(i = 0; i < G->verNum; i++)
    {
        for(j = 0; j < G->verNum; j++)
        {
            G->arc[i][j].edge = INFINITY;
            G->arc[i][j].info = NULL;
        }
    }
    //创建邻接矩阵
    printf("请输入弧的起点、终点、权值:\n");
    for(i = 0; i < G->arcNum; i++)
    {
        scanf("%c%*c%c%d", &v1, &v2, &weight);//③(%*c指跳过一个字符)
        getchar();//④
        printf("i = %d\n", i);
        int temp1 = locateVer(G, &v1);//找到顶点的位置
        int temp2 = locateVer(G, &v2);
        G->arc[temp1][temp2].edge = weight;
        printf("output:%c %c %d\n", G->verList[temp1], G->verList[temp2], G->arc[temp1][temp2].edge);
    }
    G->kind = DN;
}
/* test data and result
请输入顶点个数、弧的个数:6 10
请输入顶点元素:a b c d e f
请输入弧的起点、终点、权值:
a b 5
a c 4
a d 1
b d 6
b e 3
c d 7
c f 6
d e 5
d f 2
e f 5
*/




阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6