[C言語] 03 C89コードのコンパイル&実行 K&R第2版 5章2

K&R第2版が出版された1988年当時のC言語コードをコンパイル&実行してみました。YouTubeの演習解説動画が非常に役に立ちました。

手順
1. K&R第2版訳本P96のgetch関数ファイルをgetch.cとする。
2. K&R第2版訳本P118のgetint関数ファイルをgetint.cとする。
3. 以下のコードをmain.cとする。
4. main.cをコンパイルし、a.outを実行する。

#include <stdio.h>
#include "getch.c"
#include "getint.c"

main()
{
    int ret,c;

    if ((ret= getint(&c))==0)
        printf("not a valid number\n");
    else if (ret > 0)
        printf("valid number\n");
    else
        printf("End of file\n");

    printf("return value: %d\n",ret);

    return 0;
}

[C言語] 02 数値のコピー

変数への数値のコピーは等式による代入で可能です。

sscanfによる読み込みにおいて3番目の引数は格納先のポインタであり、数値の場合は変数名に&を付け(&horseID)、文字列の場合は変数名(horse_name)そのままとなります。

正確には&horse_name[0]ですが、horse_nameは同じ内容とのことです。また&horse_nameとしてもエラーにはなりません。

<過去コードの該当箇所>

int horseID;
int id;
char horse_name[50];

while(fgets(buf,100, fp ) != NULL ) {
    sscanf(buf, "%d, %s",&horseID,horse_name) ; // &horse_nameでも可

    if (i != 0){
        if (strcmp(horse_name,horse_name_in)==0){
            id = horseID; // 数値のコピー
            printf("コピー完了 %d %s\n",id,horse_name);
            break;
        }
    }
    i ++ ;
}

[C言語] 01 文字列のコピー strcpy

文字列のコピーにはstrcpyを使います。末尾の\0も含まれるので文字数は1つ以上多くしないとエラーになります。

当初はこれを知らなくて等式でコピーしようとしていました。コンピュータの仕組みを分かっていないと手詰まりになりますね。

<過去コードの該当箇所>

char horseID[10]; // horseIDは9文字だが末尾の\0も入れて10文字とする
char id[10]

if (i != 0){
    if (strcmp(horse_name,horse_name_in)==0){
        strcpy(id,horseID);
        printf("コピー完了 %s\n",id);
		}
}