4つの引数を取得するプログラムを作成する必要があります。最初の文字列はバイトに分割されたバイナリファイルを表し、2番目、3番目、4番目(x、y、z)は3つの整数で、合計は8です。各バイト左にxビット、その後にyビット、最後にzビットがあります。各グループは数字を表します。
これらの番号を印刷する必要があります。たとえば、forx=4, y=3, z=1
とfileには3バイトがあります。
1010 0001 1 0101 011 1 00100011結果は1001 5 3 1 211になります。
Cのファイルについて教えてください。これが私が書いたものです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
int main(int argc, char** argv) {
if (argc!=5) {
printf("enter a file name and 3 integers such that their sum is 8");
return 0;
} else {
FILE* f;
f=fopen(argv[1], "r");
if (f==NULL) {
printf("File %s does not exists \n", argv[1]);
return 0;
}
else {
int length=0;
int offset=0;
fseek(f, 0, SEEK_END);
length=ftell(f);
fseek(f, 0, SEEK_SET);
while (offset < length) {
int i;
double sum=0;
for (i=1; i<= atoi(argv[2]); ++i) {
double exponent= atoi(argv[1])- i;
sum=getc(f)*pow(2, exponent);
}
printf("%d ", (int)sum);
sum=0;
for (i=1; i<= atoi(argv[3]); ++i) {
double exponent= atoi(argv[1])- i;
sum=fetc(f)*pow(2, exponent);
}
printf("%d ", (int)sum);
sum=0;
for (i=1; i<= atoi(argv[4]); ++i) {
double exponent= atoi(argv[1])- i;
sum=getc(f)*pow(2, exponent);
}
printf("%d ", (int)sum);
offset+=8;
}
fclose(f);
}
}
return 0;
}
いくつかの質問:
argc, **argv
ファイルを使用する他のプログラムから全体をコピーします。これでいい?私が入力main c:\stackExchange 5 2 1
すると、自動的に4とargc
他のパラメータの配列が文字列として与えられますか?私はそうだと思い、上記を書きました。- 私はそれ
getc(f)
が少し戻ると思いました、これは正しいですか?
その他の修正は大歓迎です。