質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

917閲覧

c言語:関数呼び出しの方法について教えてください

s_b_310

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/03/24 13:23

前提・実現したいこと

時間を入力して、その1秒後の時間を表示するプログラムなのですが、秒の部分に+1されません。
条件は
void increment_second(unsigned int *hour, unsigned int *minute, unsigned int *second)
の関数を作り、それを利用してプログラムを動作させるというものです。

発生している問題・エラーメッセージ

時・分・秒を入力してください 時(0~23):23 分(0~59):59 秒(0~59):59 1秒後 23時59分59秒    //←入力したものがそのまま出力される(0時0分0秒となるはず)

関数呼び出しで間違っているようなのですが(関数部分のコードをmain関数内に組み込んだところ正常に動作しました)、正しい表記の方法が分かりません。

該当のソースコード

c

1void increment_second(unsigned int *hour, unsigned int *minute, unsigned int *second){ 2 second ++; 3 if(*second == 60){ 4 *second = 0; 5 *minute++; 6 if(*minute == 60){ 7 *minute = 0; 8 *hour++; 9 if(*hour == 24){ 10 *hour = 0; 11 *second++; 12 } 13 } 14 } 15} 16 17int main(void){ 18 int hour,minute,second; 19printf("時・分・秒を入力してください\n"); 20 printf("時(0~23):"); //scanf("%d", &hour); 21 do{ 22 scanf("%d",&hour); 23 if(hour < 1 || hour > 23) printf("\a1~23で入力"); 24 } 25 while(hour < 1 || hour > 23); 26 27//**************************分と秒は同様なのでカット*************************** 28 29 increment_second(&hour,&minute,&second); //おそらくこの部分が間違っています 30 31 printf("1秒後 %d時%d分%d秒\n\n",hour,minute,second); 32 return 0; 33}

試したこと

思いつく限りはすべて試し、上記のような結論に達しました。ご協力お願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

細かく見たわけではないですが、以下ではないでしょうか。

c

1void increment_second(unsigned int *hour, unsigned int *minute, unsigned int *second){ 2 (*second) ++; 3 if(*second == 60){ 4 *second = 0; 5 (*minute)++; 6 if(*minute == 60){ 7 *minute = 0; 8 (*hour)++; 9 if(*hour == 24){ 10 *hour = 0; 11 (*second)++; 12 } 13 } 14 } 15}

投稿2019/03/24 13:42

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_b_310

2019/03/24 13:59

ポインタに()を付けないといけないのですね。他の回答者の方の回答と合わせて非常に分かりやすい解説をいただけました、ありがとうございました!
guest

0

ポインタ自体のインクリメントと、
ポインタが指す値のインクリメントは厳密に区別する必要があります。

C

1#include <stdio.h> 2 3void func1(int *ptr) { 4 printf("---func1---\n"); 5 printf("%10d\n", *ptr); 6 7 ptr++; 8 9 printf("%10d\n", *ptr); 10} 11void func2(int *ptr) { 12 printf("---func2---\n"); 13 printf("%10d\n", *ptr); 14 15 (*ptr)++; 16 17 printf("%10d\n", *ptr); 18} 19 20int main(void) { 21 int arr[] = {0, 42}; 22 23 printf("%d, %d\n", arr[0], arr[1]); 24 25 func1(&arr[0]); 26 func2(&arr[0]); 27 28 printf("%d, %d\n", arr[0], arr[1]); 29 30 return 0; 31}

実行結果 Wandbox

0, 42 ---func1--- 0 42 ---func2--- 0 1 1, 42

投稿2019/03/24 13:38

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_b_310

2019/03/24 14:02

回答ありがとうございます。 プログラムの例を載せていただき、他の方の回答と合わせて深く理解できました!
guest

0

second ++;では、ポインタ自体が動いてしまいます。(*second)++;と書く必要があります。

投稿2019/03/24 13:36

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_b_310

2019/03/24 14:05

非常に簡潔な説明でとても分かりやすかったです。 他の方の回答と合わせて深く理解できました。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問