7. Console input/output

Source code

printf()の変換指定

#include <stdio.h>
int main(void)
{
    char c;
    int n;
    double d;
    char s[20] = "abcde";
    c = 65;
    printf("c: %c\n", c); // c: A
    printf("c: %d\n", c); // c: 65
    n = 66;
    printf("n: %c\n", n); // n: B
    printf("n: %d\n", n); // n: 66
    n = 1000;
    printf("  8: %o\n", n); //  8: 1750
    printf(" 10: %d\n", n); // 10: 1000
    printf("16x: %x\n", n); // 16x: 3e8
    printf("16X: %X\n", n); // 16X: 3E8
    d = 56789.12;
    printf("f: %f\n", d);                // f: 56789.120000
    printf("e: %e\n", d);                // e: 5.678912e+004
    printf("E: %E\n", d);                // E: 5.678912E+004
    printf("s: %s\n", s);                // s: abcde
    printf("c=%d n=%d s=%s\n", c, n, s); // c=65 n=1000 s=abcde
    return 0;
}

printf()のオプション指定

#include <stdio.h>
int main(void)
{
    double d = 654.321;
    printf("[%f]\n", d);    //[654.321000]
    printf("[%12f]\n", d);  //[  654.321000]
    printf("[%9.2f]\n", d); //[   654.32]
    printf("[%9.f]\n", d);  //[  654]
    printf("[%.2f]\n", d);  //[654.32]
}

fgets()関数

#include <stdio.h>
int main(void)
{
    char s[100];
    printf("Enter a string: ");
    fgets(s, 100, stdin);
    printf("%s", s);
    return 0;
}

scanf()関数とfgets()関数の違い

#include <stdio.h>
int main(void)
{
    char s1[80], s2[80];
    printf("fgets():");
    fgets(s1, 80, stdin);
    printf("s1=%s\n", s1);
    
    printf("scanf():");
    scanf("%s", s1);
    printf("s1=%s\n", s1);
    scanf("%s", s2);
    printf("s2=%s\n", s2);
    return 0;
}

Problem

問題1. キーボードから入力した10進数の数値を,8進数と16進数で表示せよ.

問題2. キーボードから入力した文字列を配列に格納し,1文字ずつ文字コード(2桁の16進数)で表示せよ.(参考: p.244-245)

問題3. キーボードから入力した文字列をアルファベット順に並び替えて出力せよ.ただし,入力するアルファベットはすべて小文字とする.

scanf()%sで文字列読み込みができる(p.117)

各文字は文字コード表にある値で表される(p.244 – 245)

「隣り合う配列の要素と比較し,順序が逆であれば入れ替える」ということを繰り返す

Solutions

問題1

キーボードから入力した10進数の数値を,8進数と16進数で表示せよ.

#include <stdio.h>
int main(void)
{
    int num;
    printf("input a number: \n");
    scanf("%d",&num);
    printf("8:%o\n16x:%x\n",num,num);
    return 0;
}

問題2

キーボードから入力した文字列を配列に格納し,1文字ずつ文字コード(2桁の16進数)で表示せよ.(参考: p.244-245)

#include <stdio.h>
int main(void)
{
    char ss[80]; int i=0;
    printf("Input a string:");
    fgets(ss,80,stdin);
    while(ss[i] != '\0'){
        printf("%2X ",ss[i++]);
    }
    printf("\n");
    return 0;
}

問題3

キーボードから入力した文字列をアルファベット順に並び替えて出力せよ.ただし,入力するアルファベットはすべて小文字とする.

#include <stdio.h>
int main(void){
    int i,j,temp;
    char str[100];
    scanf("%s",str);
    for(i=0;str[i]!=0;i++){
        for(j=i+1;str[j]!=0;j++){
            if(str[i] > str[j]){
                temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
    printf("%s\n",str);
    return 0;
}

Last updated