質問編集履歴

1

解決verを更新しました。

2020/06/10 05:06

投稿

VanS
VanS

スコア7

test CHANGED
File without changes
test CHANGED
@@ -322,6 +322,256 @@
322
322
 
323
323
 
324
324
 
325
+
326
+
327
+ #include <stdio.h>
328
+
329
+ #include <stdlib.h>
330
+
331
+ #include <ctype.h>
332
+
333
+
334
+
335
+ typedef long ELEMENT;
336
+
337
+
338
+
339
+ #define STACK_SIZE 100
340
+
341
+
342
+
343
+ ELEMENT stack[STACK_SIZE];
344
+
345
+ int n;
346
+
347
+
348
+
349
+ /*push関数**/
350
+
351
+ void push(ELEMENT x)
352
+
353
+ {
354
+
355
+ if (n>=STACK_SIZE){
356
+
357
+ printf("stack overflow");
358
+
359
+ exit(1);
360
+
361
+ }
362
+
363
+ stack[n++]=x;
364
+
365
+ }
366
+
367
+
368
+
369
+ /*pop関数*/
370
+
371
+ ELEMENT pop()
372
+
373
+ {
374
+
375
+ if (n<=0){
376
+
377
+ printf("stack underflow");
378
+
379
+ exit(1);
380
+
381
+ }
382
+
383
+ return stack[--n];
384
+
385
+ }
386
+
387
+
388
+
389
+ int is_digit(char *formula)
390
+
391
+ {
392
+
393
+ if (*formula=='+' || *formula=='-'){
394
+
395
+ formula++;
396
+
397
+ if (*formula>='0' && *formula<='9'){
398
+
399
+ return 1;
400
+
401
+ }
402
+
403
+ return 0;
404
+
405
+ }
406
+
407
+ if (*formula>='0' && *formula<='9'){
408
+
409
+ return 1;
410
+
411
+ }
412
+
413
+ return 0;
414
+
415
+ }
416
+
417
+
418
+
419
+
420
+
421
+ 解決ver↓
422
+
423
+
424
+
425
+ int main(void)
426
+
427
+ {
428
+
429
+ n=0; /*スタックの初期化*/
430
+
431
+
432
+
433
+ int s;
434
+
435
+ printf("数字データの時はスタックに積み、ピリオドの時はスタックから降ろします。(EOFで終了)\n");
436
+
437
+ printf("データ入力の方法を選んでください。\n0..キーボード/1..ファイル:");
438
+
439
+ scanf("%d",&s);putchar('\n');
440
+
441
+ long x,a,b;
442
+
443
+ FILE *fp=stdin;
444
+
445
+
446
+
447
+ if (s==1){
448
+
449
+ fp=fopen("data.txt","r");
450
+
451
+ if (fp==NULL){
452
+
453
+ printf("ファイルオープン失敗\n");
454
+
455
+ return 1;
456
+
457
+ }
458
+
459
+ }
460
+
461
+
462
+
463
+ char str[32]={0};
464
+
465
+
466
+
467
+
468
+
469
+ if (s==0)
470
+
471
+ printf("input:");
472
+
473
+
474
+
475
+ while((fscanf(fp,"%s",str)!=EOF)){
476
+
477
+
478
+
479
+ if (is_digit(str)){
480
+
481
+ x=atoi(str);
482
+
483
+ push(x);
484
+
485
+
486
+
487
+ }else{
488
+
489
+
490
+
491
+ switch (str[0]){
492
+
493
+ case '.':
494
+
495
+ pop();
496
+
497
+ break;
498
+
499
+ case '+':
500
+
501
+ b=pop();a=pop();
502
+
503
+ push(a+b);
504
+
505
+ break;
506
+
507
+ case '-':
508
+
509
+ b=pop();a=pop();
510
+
511
+ push(a-b);
512
+
513
+ break;
514
+
515
+ case '*':
516
+
517
+ b=pop();a=pop();
518
+
519
+ push(a*b);
520
+
521
+ break;
522
+
523
+ case '/':
524
+
525
+ b=pop();a=pop();
526
+
527
+ push(a/b);
528
+
529
+ break;
530
+
531
+ case ' ':
532
+
533
+ break;
534
+
535
+ case 'A': /*Aで答えを表示*/
536
+
537
+ if(n!=0)
538
+
539
+ printf("答えは%ldです。",pop());
540
+
541
+ n=0;
542
+
543
+ break;
544
+
545
+
546
+
547
+ default:
548
+
549
+ printf("不正な入力です。\n");
550
+
551
+ while ((fscanf(fp,"%s",str)!=EOF))
552
+
553
+ ;
554
+
555
+ break;
556
+
557
+ }
558
+
559
+ }
560
+
561
+ }
562
+
563
+ fclose(fp);
564
+
565
+ return 0;
566
+
567
+ }
568
+
569
+
570
+
571
+
572
+
573
+
574
+
325
575
  ```
326
576
 
327
577