掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26401

文字の切捨て保存するプログラムついて
投稿者---Zenn(2006/03/12 19:30:06)


#include<stdio.h>
#include<stdlib.h>
main(){

FILE *fin,*fff;
char fone[]="text1.text";
char ftwo[]="text2.text";
char ss[500];
int t=0;
ss[0]='\0';
/////////////////ファイル//////////////////////////
if((fin=fopen(fone,"r"))==NULL){
printf("NOT\n");
exit(1);
}//if fone c

if( (fff=fopen(ftwo,"w") )==NULL){
printf("NOT\n");
exit(1);
}//if ftwo c

///////////////文字の切捨て保存/////////////////////
while(fgets(ss,256,fin)!=NULL){
for(t=0;t<255;t++){

    if(ss[t]=='@'){
ss[t]='\0';}//if c
}//for c

fprintf(fff,"%s\n",ss);
}//while c

/////////////////////////////////////////////
fclose(fin);
fclose(fff);

}//終了main

はじめましてZennといいます。よろしくお願いします。
(C言語初心者です。)
動作環境VC++6.0
Cで書いています。どんなプログラムかというと、あいうえお@あああ
という文字が入力されているテキストファイル1があったとします。
そのファイルの@と@後の文字のけて、(@あああ)
あいうえおとテキストファイル2に
置き換え保存するというプログラムですが・・・。

アイウエオ@アアアア
アァイウエ@イイイイ
アイウエオ@アアアア

とテキスト1に保存したファイルを置き換えると
テキスト2にはなぜか。
アイウエオ
ア・
アイウエオ

と保存されるのです。なぜなのかわかりません。
小文字のァが何か原因を起こしていると思うのですが?
どなたか、わかる方教えてください。よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:文字の切捨て保存するプログラムついて 26402 あかま 2006/03/12 19:50:47
<子記事> Re:文字の切捨て保存するプログラムついて 26405 επιστημη 2006/03/12 21:31:55


No.26402

Re:文字の切捨て保存するプログラムついて
投稿者---あかま(2006/03/12 19:50:47)


ソースコードは「HTML変換ツール」を使って貼りなおしてください。

全角の@と半角の@でどちらを処理するのでしょうか?
プログラムでは半角、説明では全角になっています。
とりあえず全角の処理は難しいので、文字コードを理解していないならお勧めできません。


この投稿にコメントする

削除パスワード

No.26403

Re:文字の切捨て保存するプログラムついて
投稿者---Zenn(2006/03/12 21:09:14)


#include<stdio.h>
#include<stdlib.h>
main(){

FILE *fin,*fff;
char fone[]="text1.text";
char ftwo[]="text2.text";
char ss[500];
int t=0;
ss[0]='\0';
/////////////////ファイル//////////////////////////

if((fin=fopen(fone,"r"))==NULL){
printf("NOT\n");
exit(1);
}//if fone c


if( (fff=fopen(ftwo,"w") )==NULL){
printf("NOT\n");
exit(1);
}//if ftwo c


///////////////文字の切捨て保存/////////////////////

while(fgets(ss,256,fin)!=NULL){
for(t=0;t<255;t++){

    if(ss[t]=='@'){
ss[t]='\0';}//if c 

}//for c


fprintf(fff,"%s\n",ss);
}//while c


/////////////////////////////////////////////

fclose(fin);
fclose(fff);

}//終了main



すいませんでした。
@は半角です。



この投稿にコメントする

削除パスワード

No.26404

Re:文字の切捨て保存するプログラムついて
投稿者---Hermit(2006/03/12 21:27:23)


SHIFT JIS で、"ァ"の2バイト目は、0x40 で、'@' と同じなので、
そこを '\0' にするからです。

'@' と同じコードをっ見つける場合、それが本当に
アスキーコードの '@' であるか確かめる必要があります。
(漢字である場合は、読み飛ばしてもいいかも)

方法はいろいろあるはずだが・・・
文字コードは多岐に渡るので、全てのコードに対応するのはどうしたらいいんかいな・・・



この投稿にコメントする

削除パスワード

No.26405

Re:文字の切捨て保存するプログラムついて
投稿者---επιστημη(2006/03/12 21:31:55)


>小文字のァが何か原因を起こしていると思うのですが?
>どなたか、わかる方教えてください。よろしくお願いします。

#include <stdio.h>

int main() {
 char* a = "ァ";
 if ( a[1] == '@' ) {
  printf("[%s]には'@'が含まれています\n");
}
 return 0;
}

…ってことですね。"ァ" の第2バイトが'@'と一致します。



この投稿にコメントする

削除パスワード

No.26406

Re:文字の切捨て保存するプログラムついて
投稿者---Zenn(2006/03/12 22:01:03)


なるほど、Hermitさん επιστημηさん、あかまさん
回答、ありがとうございます。理解できました。

なんとかなりそうです。




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧