if((fp4 = fopen("sample.txt","r")) == NULL){
printf("can't open\n");
return(-1);//強制終了
}
else{
while((c=fgetc(fp4))!=EOF){/*EOFまでfp4に入力*/
if(isupper(c)){
c=tolower(c);
printf("%s",c);
}
else
printf("a"); //確認用
}
}
ファイルから文字を読み込んでctype関数を使って大文字から小文字に変換したいんですがうまくいきません。
コンパイルしても確認用が反応しないんでおそらくどこか間違ってると思うんですがわかりません。
ご教授宜しくお願いします。
No.6ベストアンサー
- 回答日時:
>if((fp3 = fopen("sample.txt","w")) == NULL){
>if((fp4 = fopen("sample.txt","r")) == NULL){
>fclose(fp4);
>fclose(fp3);
これはちょっと怪しいですね。↓のように書き込みが終わったらすぐにクローズした方が確実です。
>if((fp3 = fopen("sample.txt","w")) == NULL){
>fclose(fp3);
>if((fp4 = fopen("sample.txt","r")) == NULL){
>fclose(fp4);
No.4
- 回答日時:
sample.txtと結果を示した方が良いですね。
#2さんも指摘されてますが
printf("a"); //確認用
の意図が全く理解できません。何のためにしているのでしょう?
この回答への補足
if((fp4 = fopen("sample.txt","r")) == NULL){
printf("can't open\n");
}
else{
while((c=fgetc(fp4)) != EOF){
if(isupper(c)){
c = tolower(c);
}
}
printf("%c",c);
}
}
いろいろ改良した結果結局これになりました…ができません。
cはint型でOKですよね?
警告 W8004 report.c 77: 'd' に代入した値は使われていない(関数 main )
と出ます(|| ゜Д゜)
No.3
- 回答日時:
まず問題点の切り分けを行いましょう。
以下のプログラムを実行してください。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c = 'A';
printf ("元の値=%c\n",c);
if (isupper(c)){
printf("大文字である\n");
c = tolower(c);
printf ("変換後の値=%c\n",c);
}else{
printf("大文字でない\n");
}
return 0;
}
この結果、
元の値=A
大文字である
変換後の値=a
が表示されれば、正しくctype関数が機能しています。
windows2000,ボーランドCで確認した結果は、正常に動作しています。(当方の環境)
もし、これが正しく動作しないなら、
あなたの使用しているOS、コンパイラの種類を提示してください。
% gcc -o a a.c
% ./a
元の値=A
大文字である
変換後の値=a
%
ctype関数うまくいってるみたいです。
もうすこし考えてみます・・・
No.2
- 回答日時:
if(isupper(c)){
c=tolower(c);
printf("%c",c);
}
else
printf("a"); //確認用
読み込んだ文字が小文字の場合は何も出力しないのですか?(確認用で"a"が出るようになってますけど)
if(isupper(c))
c=tolower(c);
else
printf("a"); //確認用
printf("%c",c);
こうでは?
この回答への補足
CTYPEじゃないほうも作ってみました、、
何も表示されません^^;
#include<stdio.h>
#include<ctype.h>
#define M 10
struct data{//構造体宣言
char author[100];
char title[100];
char publisher[100];
int year;
}book[10],tmp;
int main(void)//main関数
{
FILE *fp1,*fp2,*fp3,*fp4;//ファイルの宣言
int i,j,k;//for文の時に使用
char c[5];
char d[100];
if((fp1 = fopen("biblio.txt","r")) == NULL){
printf("can't open");
return(-1);//強制終了
}
else{
for(i=0;i<M;i++){
fscanf(fp1,"%[^,],%[^,],%[^,],%d%*c",book[i].author,book[i].title,book[i].publisher,&book[i].year);
}
}
for(j=0;j<M;j++){
for(k=0;k<M;k++){
if(j<=k){//これを書かないと降順になってしまう。(j=2、k=0の時また交換されてしまう。)
if(book[j].year < book[k].year){//もし発行年が次の構造体の発行年より大きかったら
tmp=book[j];
book[j]=book[k];
book[k]=tmp;
}
}
}
}
if((fp2 = fopen("formatted.txt","w")) == NULL){
printf("can't open\n");
return(-1);//強制終了
}
else{
for(i=0;i<M;i++){
fprintf(fp2,"Author :%s\n Title :%s\n Publisher :%s\n Year :%d\n\n ",book[i].author,book[i].title,book[i].publisher,book[i].year);
}
}
if((fp3 = fopen("sample.txt","w")) == NULL){
printf("can't open");
return(-1);//強制終了
}
else{//タイトルだけをサンプルに書き出す
for(i=0;i<M;i++){
fprintf(fp3,"%s",book[i].title);
}
}
if((fp4 = fopen("sample.txt","r")) == NULL){
printf("can't open\n");
return(-1);//強制終了
}
else{
while(fscanf(fp4,"%s%c",&c,&d)!=EOF){/*EOFまでfp3に入力*/
if(c[0]>=65 && c[0]<=90){/*大文字表記なら小文字表記に変換*/
c[0]+=32;
printf("%s",c);
}
}
}
fclose(fp4);
fclose(fp3);
fclose(fp2);
fclose(fp1);
return(0);//正常終了
}
読み込んだ文字が小文字の場合も出力したいんですが、
何も表示されないんでまず大文字を小文字に変える所からしようかなと。
よろしくおねがいします。
No.1
- 回答日時:
printf の %s は文字列(charのポインタ)なので、
%c ではないですか?
この回答への補足
前の部分のソースです
#include<stdio.h>
#include<ctype.h>
#define M 10
struct data{//構造体宣言
char author[100];
char title[100];
char publisher[100];
int year;
}book[10],tmp;
int main(void)//main関数
{
FILE *fp1,*fp2,*fp3,*fp4,*fp5;//ファイルの宣言
int i,j,k;//for文の時に使用
int c;
if((fp1 = fopen("biblio.txt","r")) == NULL){
printf("can't open");
return(-1);//強制終了
}
else{
for(i=0;i<M;i++){
fscanf(fp1,"%[^,],%[^,],%[^,],%d%*c",book[i].author,book[i].title,book[i].publisher,&book[i].year);
}
}
for(j=0;j<M;j++){
for(k=0;k<M;k++){
if(j<=k){//これを書かないと降順になってしまう。(j=2、k=0の時また交換されてしまう。)
if(book[j].year < book[k].year){//もし発行年が次の構造体の発行年より大きかったら
tmp=book[j];
book[j]=book[k];
book[k]=tmp;
}
}
}
}
if((fp2 = fopen("formatted.txt","w")) == NULL){
printf("can't open\n");
return(-1);//強制終了
}
else{
for(i=0;i<M;i++){
fprintf(fp2,"Author :%s\n Title :%s\n Publisher :%s\n Year :%d\n\n ",book[i].author,book[i].title,book[i].publisher,book[i].year);
}
}
if((fp3 = fopen("sample.txt","w")) == NULL){
printf("can't open");
return(-1);//強制終了
}
else{//タイトルだけをサンプルに書き出す
for(i=0;i<M;i++){
fprintf(fp3,"%s",book[i].title);
}
}
早速回答ありがとうございます。
%cに変更してみましたが、やはりできません。
Problem Solving and Program Design in CC : A Reference ManualC Primer PlusC How to ProgramC Programming for Engineering and Computer ScienceIntroduction to CProgramming Embedded Systems in C and C++Absolute Beginner's Guide to CNumerical Recipes in C : The Art of Scientific ComputingThe C Programming Language
これがsampleのなかに入ってるんですが、ctypeじゃ無理ですかね。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
char型2つを結合し、short型に...
-
C言語で型汎用性のある関数を作...
-
ファイルを辞書順に並べ替える...
-
ファイルから数字列を16進数の...
-
reallocとstrtokの併用について
-
【C言語】全角文字の配列を、全...
-
Cプログラムについて
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
Ç言語でファイルサイズを変更す...
-
C++で指定文字列のカウント方法...
-
処理系によって。
-
コマンドファイルから、ビット...
-
配列への文字列の格納について
-
構造体メンバの初期化
-
fread処理について
-
fgetsがうまくいきません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語のプログラムで、途中で止...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
【C言語】全角文字の配列を、全...
-
構造体メンバの初期化
-
Cでファイルの行数をカウントす...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
終了条件Ctrl+zについて,結果表...
-
Ç言語でファイルサイズを変更す...
-
エラーについて質問です。
-
C言語でのCSVファイルの読み出...
-
C++で指定文字列のカウント方法...
-
VC++でSQLへSELECT文を送ったの...
-
fscanfの使い方
-
c言語で文書を読み込み、単語の...
おすすめ情報