前提・実現したいこと
以下のプログラムでループ内で変数count++;としてインクリメントするのですが
ループを抜けた後にprintfで確認すると格納されている値が変わってしまいます。
発生している問題・エラーメッセージ
count = 0 count = 1 count = 2 count = 3 count = 4 count = 5 count = 6 count = 7 count = 8 count = 9 count = 10 count = 11 count = 12 count = 13 count = 14 count = 15 count = 16 count = 4339 ← ループを抜けた後の値
該当のソースコード
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4#define SETMAX 10600 5char buf[256]; 6 7struct station { int eki; char name[64], rosen[64]; }; 8int main() { 9 int i=0, ekisize, l, r, m; 10 int num[10], count = 0; 11 struct station *ekidata[SETMAX], *st; 12 char ekiname[64]; 13 FILE *fp = fopen("./ekisen.txt","r"); 14 while(fgets(buf,sizeof(buf),fp)!=NULL && i<SETMAX) { 15 st = (struct station*) malloc(sizeof(struct station)); 16 sscanf(buf, "%[^:]:%d:%[^\n]*c", st->name, &st->eki, st->rosen); 17 ekidata[i] = st; 18 ++i; 19 } 20 fclose(fp); 21 ekisize = i; 22 scanf("%[^\n]%*c",ekiname); 23 l=0; r=ekisize-1; 24 /* ここから二分探索 */ 25 while(l<=r) { 26 /* ※ここを適切なプログラムで埋める */ 27 m = (l + r)/2; 28 if(strcmp(ekiname, ekidata[m]->name) == 0) { 29 //num[count++] = m; 30 for(i=m-20; i<=m+20; i++) { 31 if(strcmp(ekiname, ekidata[i]->name) == 0) { 32 printf("count = %d\n",count); 33 num[count++] = i; 34 } 35 } 36 printf("count = %d\n",count); 37 break; 38 } else if(strcmp(ekiname, ekidata[m]->name) < 0) { 39 r = m; 40 m = (l+r)/2; 41 } else { 42 l = m; 43 m =(l+r)/2; 44 } 45 } 46 return 0; 47}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/31 07:36