| report4-1.c |
|---|
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE 1024
int main(void){
FILE *fp;
const char *filename1="/usr/share/dict/words";
const char *filename2="freqword-linux.txt";
char buf[BUF_SIZE];
char *ch;
fp=fopen(filename1, "r");
if(fp==NULL){
printf("File:%s can't open!", filename1);
exit(1);
}
while(1){
ch=fgets(buf, BUF_SIZE, fp);
if(ch==NULL){
break;
}
if(strcmp(buf, "Japan\n")==0){
/********↑"Japan"を探すのでなく、"Japan\n"を探す*****/
printf("%s", buf);
}
}
fclose(fp);
fp=fopen(filename2, "r");
if(fp==NULL){
printf("File:%s can't open!", filename2);
exit(1);
}
while(1){
ch=fgets(buf, BUF_SIZE, fp);
if(ch==NULL){
break;
}
if(strcmp(buf, "printf\n")==0){
/********↑"printf"を探すのでなく、"printf\n"を探す*****/
printf("%s", buf);
}
}
fclose(fp);
return 0;
}
|
==を用いることができない理由を説明してください。
| report4-2.c |
|---|
#include<stdio.h>
#include<stdlib.h>
#define BUF_SIZE 1024
int main(void){
FILE *fp;
char *filename="Japan.txt";
char buf[BUF_SIZE];
char *target_string="Japan\n";
char *ch;
fp=fopen(filename, "r");
if(fp==NULL){
printf("File:%s can't open!", filename);
exit(1);
}
while(1){
ch=fgets(buf, BUF_SIZE, fp);
if(ch==NULL){
break;
}
if(buf==target_string){
printf("%s", buf);
}
/****
printf("target_string:%s target_string's address:%p\n", target_string, (void *)target_string);
printf("buf:%s buf's address:%p\n", buf, (void *)buf);
****/
}
fclose(fp);
return 0;
}
|
target_stringと検索先bufの正体が画面表示されます。
これらはchar型のアドレスを表し、その具体的な値はそれぞれ異なることが分かります。
それらのアドレスにはいずれも文字列"Japan\n"が格納されているという意味では
同じですが、比較演算子ではアドレスを比較するので一致を検出できません。
BUF_SIZE文字以上ある行を読み込もうとした時点で、
エラーメッセージを表示してその場で(exit関数を用いて)
終了するようにしてください。
(ヒント:1行BUF_SIZE文字未満の行を読み込むと、
読み込んだ文字列中に、必ずある文字が含まれています。)
| report4-3.c |
|---|
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUF_SIZE 25
int main(void){
FILE *fp;
const char *filename="freqword-linux.txt";
char buf[BUF_SIZE];
char *ch;
int line=1;
char *check_whole_line;
fp=fopen(filename, "r");
if(fp==NULL){
printf("Can't Open File %s\n", filename);
exit(1);
}
while(1){
ch=fgets(buf, BUF_SIZE, fp);
if(ch==NULL){
break;
}
check_whole_line=strchr(buf, '\n');
if(check_whole_line==NULL){
printf("%d行目:1行読み込めていません。\n", line);
exit(1);
}
line++;
}
fclose(fp);
return 0;
}
|
if(strcmp(fgets(buf, BUF_SIZE, fp), "Japan\n")==0){
|
...
if(isspace(*buf)!=0)
{
printf("EROR\n");
exit(1);
}
...
|