###前提・実現したいこと
長さ5のキューを再現したいです。
実行後、無限ループで1でエンキュー、2でデキュー、それ以外で終了します。
エンキューのときはキューに入れるデータを入力し、配列に保存します。
デキューのときは配列の一番若いものを表示後、配列の値を一つずつ前にずらします。
エンキュー、デキュー、終了後にキューの状態を表示します。
visual studioの実行結果が実現したいものですが、gccだと違う結果が出てしまいます。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4#define QLEN 5 5#define QEMP -1 6#define QFUL -1 7 8int enq(int); 9int deq(void); 10void listq(void); 11int AHI[QLEN];/*キューの長さ*/ 12int num=0;/*現在のキューの数*/ 13 14int main() { 15 16 while (1) { 17 int x, y,HUNT; 18 printf("1 = enQ/2 = deQ/else = end ==>"); 19 scanf("%d", &x); 20 if (x == 1) { 21 printf("enQ data ==> "); 22 scanf("%d", &y); 23 HUNT=enq(y); 24 if (HUNT == QFUL)printf("Q full, you should deQ first!\n"); 25 } 26 if (x == 2) { 27 if (num == 0)printf("Q empty, you should enQ first!\n"); 28 printf("deQ data : %d\n", deq()); 29 } 30 listq(); 31 32 if (x != 1 && x != 2)break; 33 34 } 35 return 0; 36} 37 38void listq (void) { 39 int j=0; 40 if (num == 0)printf("Queue empty!\n"); 41 printf("Queue : "); 42 while (j < num) { 43 printf("%d ", AHI[j]); 44 j++; 45 } 46 printf("\n"); 47} 48 49int enq(int data) { 50 51 if (num == QLEN)return QFUL; 52 AHI[num] = data; 53 num++; 54 return 0; 55} 56 57int deq(void) { 58 int i,JY; 59 int RRM[QLEN]; 60 if (num == 0)return QEMP; 61 JY = AHI[0]; 62 for (i = num-1; i >= 0; i--) { 63 RRM[i] = AHI[i]; 64 } 65 num--; 66 for (i =num; i >= 0; i--) { 67 AHI[i-1] = RRM[i]; 68 } 69 return JY; 70}
###Visual Studio 2017での実行結果
1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 2 Queue : 2 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 4 Queue : 2 4 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 6 Queue : 2 4 6 1 = enQ/2 = deQ/else = end ==>2 deQ data : 2 Queue : 4 6 1 = enQ/2 = deQ/else = end ==>2 deQ data : 4 Queue : 6 1 = enQ/2 = deQ/else = end ==>2 deQ data : 6 Queue empty! Queue : 1 = enQ/2 = deQ/else = end ==>0 Queue empty! Queue : 続行するには何かキーを押してください . . .
###UNIX gccでの実行結果
1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 2 Queue : 2 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 4 Queue : 2 4 1 = enQ/2 = deQ/else = end ==>2 deQ data : 2 Queue : 4 4 1 = enQ/2 = deQ/else = end ==>6 Queue : 4 4 sshsv171:Ex02 s1250109[61]$ ./a.out 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 2 Queue : 2 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 4 Queue : 2 4 1 = enQ/2 = deQ/else = end ==>1 enQ data ==> 6 Queue : 2 4 6 1 = enQ/2 = deQ/else = end ==>2 deQ data : 2 Queue : 4 6 1 = enQ/2 = deQ/else = end ==>2 deQ data : 4 Queue : 6 6 6 0 1 = enQ/2 = deQ/else = end ==>2 deQ data : 6 Queue : 6 6 0 0 0 0 1 = enQ/2 = deQ/else = end ==>0 Queue : 6 6 0 0 0 0
###原因の可能性
UNIXのgccだとscanf_sが使えないので、scanf_sをscanfに変更しているのでそこがもしかすると関係あるのかもしれません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。