7. コンソール入出力#
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. キーボードから入力した文字列をアルファベット順に並び替えて出力せよ.ただし,入力するアルファベットはすべて小文字とする.
{% hint style=”info” %}
scanf()
は%s
で文字列読み込みができる(p.117)
各文字は文字コード表にある値で表される(p.244 – 245)
「隣り合う配列の要素と比較し,順序が逆であれば入れ替える」ということを繰り返す {% endhint %}
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;
}