ここから本文です

C言語に関する質問です。

nob********さん

2011/6/1014:51:01

C言語に関する質問です。

1行に1つの文字列が書かれているファイルを読み込んで、第二、第三引数に与えた数値の行番号の文字列を入れ替えて表示するプログラムをつくってます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 300

void swapData(char *x, char *y);
int main(int argc, char *argv[])
{
char data[MAXSIZE][300];
int i, j, p, q;
FILE *fp;

p = atoi(argv[2]);
q = atoi(argv[3]);

if(argc != 4)
{
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
exit(0);
}

if ((fp = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "File %s is not found.\n", argv[1]);
exit(0);
}

for(i = 0; i < MAXSIZE; i++)
{
if (fscanf(fp,"%s", &data[i][300]) == EOF)
break;

}

printf("Read %d data\n", i);


swapData(&data[p][300], &data[q][300]);
for(j = 0; j < i; j++)
printf("%s\n", data[j]);
return 1;
}

void swapData(char *x, char *y){
char *tmp;

strcpy(tmp, x);
strcpy(x, y);
strcpy(y, tmp);
}

コンパイルは通ったのですが、正しく動作しません。
どこがおかしいのでしょうか。教えてくださいお願いします。

閲覧数:
201
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

ecl********さん

2011/6/1015:13:12

今回の問題とは直接関係ありませんが
p = atoi(argv[2]); q = atoi(argv[3]);
if(argc != 4) { fprintf(stderr, "Usage: %s <filename>\n", argv[0]); exit(0); }
は順番が逆です。
if(argc != 4) { fprintf(stderr, "Usage: %s <filename>\n", argv[0]); exit(0); }
p = atoi(argv[2]); q = atoi(argv[3]);
この順番にしないとargcをチェックする意味がありません。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

lin********さん

編集あり2011/6/1015:44:18

char *tmp;

char tmp[300];

追記
if (fscanf(fp,"%s", &data[i][300]) == EOF)

if (fgets(data[i],300,fp) == NULL)

swapData(&data[p][300], &data[q][300]);
をswapData(data[p], data[q]);

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる