|
下記のプログラムはテキストファイルで読み込んだものを構造体にし、構造体にしたもののオペコードに入った命令の数を数えるプログラムです。
テキストファイルの中身(ras.txt)は「add r1 r2 r3」,「sub r4 r5 r6」です。
オペコードに入った命令がなくなるまで読みたいのですが、見当がつきません。
どのようにすればよいのでしょうか?
教えてください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct youso{ /* 構造体の宣言 */
char opecode[20];
char operand0[20];
char operand1[20];
char operand2[20];
};
int goukei(int x);
int main(int argc, char *argv[])
{
FILE *fp;
int clock=0;
fp=fopen("ras.txt", "r");
if(fp==NULL){
printf("ファイルをオープンできませんでした\n");
return 1;
}else{
printf("ファイルをオープンしました\n");
}
clock=goukei(clock);
printf("合計は%dです\n",clock);
fclose(fp);
return 0;
}
int goukei(int clock)
{
int i;
char line[100];
struct youso y[20]; /* 構造体変数と構造体配列の宣言 */
/* 構造体配列に scanf()でデータを入力 */
for(i = 0; i < n; i++) {
fgets(line, sizeof(line), stdin);
sscanf(line, "%s", y[i].opecode);
fgets(line, sizeof(line), stdin);
sscanf(line, "%s", y[i].operand0);
fgets(line, sizeof(line), stdin);
sscanf(line, "%s", y[i].operand1);
fgets(line, sizeof(line), stdin);
sscanf(line, "%s", y[i].operand2);
/* 入力データの確認 */
if(i==0){
printf("opecode:%s operand0:%s operand1:%s operand2:%s\n",
y[i].opecode, y[i].operand0, y[i].operand1, y[i].operand2);
}else{
printf("opecode:%s operand0:%s operand1:%s operand2:%s p_opecode:%s\n",
y[i].opecode, y[i].operand0, y[i].operand1, y[i].operand2, y[i-1].opecode);
}
/* オペコード */
if(strcmp(y[i].opecode,"add")==0){
printf("%dです\n",clock+1);
clock=clock+1;
}else{
printf("%dです\n",clock);
}
}
return clock;
}
|