問題は十進数二桁の正整数をgetchar()を用いて文字型の変数xとyから元の10進二桁の正整数を復元して整数型変数zに格納せよ zをprintf()で出力し正しく格納されていることを格納せよ。です
#include<stdio.h>
int main(void)
{
char x[256],y[256];
int z;
printf("整数を一文字入力して下さい。\n");
x=getchar();
printf("整数を一文字入力して下さい。\n");
y=getchar();
z=x*10+y;
printf("%d\n",z);
return(0);
}
これをコンパイルすると
kadai5-5.c: In function `main':
kadai5-5.c:9: incompatible types in assignment
kadai5-5.c:11: incompatible types in assignment
kadai5-5.c:12: `zyuu' undeclared (first use in this function)
kadai5-5.c:12: (Each undeclared identifier is reported only once
kadai5-5.c:12: for each function it appears in.)
kadai5-5.c:13: `iti' undeclared (first use in this function)
kadai5-5.c:14: invalid operands to binary +
こう表示されます。
C言語の参考書片手に試行錯誤してるんですがなかなかできません。
よろしくおねがいします。
No.4ベストアンサー
- 回答日時:
行番号つきでひとつずつ確認しましょう。
1: #include<stdio.h>
2: #include<stdlib.h>
3: int main(void);
4: int main(void)
5: {
6: char x[256],y[256];
7: int z;
8: printf("整数を一文字入力して下さい。\n");
9: x=getchar();
10: printf("整数を一文字入力して下さい。\n");
11: y=getchar();
12: zyuu=atoi(x);
13: iti=atoi(y);
14: z=x+y;
15: printf("%d\n",z);
16: return(0);
17: }
> kadai5-5.c: In function `main':
> kadai5-5.c:9: incompatible types in assignment
getcharの仮宣言は、int getchar(void )です。
xはchar x[100]と宣言されています。
この場合、xは配列の先頭アドレス(すなわち&(x[0]))です。であるため、x[0]に値を代入したい場合、x[0]としなければなりません。または、宣言をchar xとしてください。これなら、xは変数そのものになります。
> kadai5-5.c:11: incompatible types in assignment
上記xの問題と同じことをyでやってます。
> kadai5-5.c:12: `zyuu' undeclared (first use in this function)
zyuuが宣言されていません。zyuuを使う場合は int zyuu;として宣言してください。
> kadai5-5.c:12: (Each undeclared identifier is reported only once
> kadai5-5.c:12: for each function it appears in.)
このエラーは上記のエラーの続きなので直せば一緒に消えます。
> kadai5-5.c:13: `iti' undeclared (first use in this function)
itiが宣言されていません。
> kadai5-5.c:14: invalid operands to binary +
せっかく計算したzyuuとitiを足すべきです。
これはタダの書き間違いですね?
このプログラム、2つの方式が混ざってしまっています。
まずはzyuu,itiの変数宣言を追加してください。
次の方向は二つ。
1.atoiを使わない場合はx,yの宣言は配列をやめ、次のようにする。
zyuu=x-'0';
iti=y-'0';
とする。
2.atoiを使いたい場合、文字列として扱わなければならないため、x,yの宣言はそのままでよい。
9行目、11行目を次のようにする。
x[0]=getchar();x[1]='\0';
y[0]=getchar();y[1]='\0';
char配列を文字列として扱いたい場合、文字終端を正しくセットしておかなければなりません。
注意:
getcharをはじめとするGETC系関数は、文字列ではなく文字そのものを取得します。文字配列に値を格納したい場合は、添え字([]演算子)を用意する必要があります。
fgetsとgetsのFGETS系関数は文字列を取得します。
この場合は、文字配列のアドレスを渡してそこにデータが格納されます。
大変わかりやすく、すぐに理解できました。
ここでつまづくと後の授業ついていけなくなるんで助かりました~
本当にありがとうございました~(TдT)
No.3
- 回答日時:
1つの例
#include<stdio.h>
#include<stdlib.h>
int main(void){
char x,y;
int z;
printf("正整数を2文字入力して下さい。\n");
x=getchar();y=getchar();
z=(x-'0')*10+(y-'0');
printf("%d\n",z);
return(0);
}
この回答みるまで問題の意味間違ってました^^;
ありがとうございました。
でも、z=(x-'0')*10+(y-'0');
ここの-0の意味がよくわかりません。
No.2
- 回答日時:
気の付いたところを…
int main(void);<いらない
char x[256],y[256];<配列にする必要なし
x=getchar();<バッファリングされてるかも・
zyuu=atoi(x);<atoiの引数はchar*
z=x+y;<x*10してやらないといけない
No.1
- 回答日時:
質問者です
プログラムの部分が間違ってました。
#include<stdio.h>
#include<stdlib.h>
int main(void);
int main(void)
{
char x[256],y[256];
int z;
printf("整数を一文字入力して下さい。\n");
x=getchar();
printf("整数を一文字入力して下さい。\n");
y=getchar();
zyuu=atoi(x);
iti=atoi(y);
z=x+y;
printf("%d\n",z);
return(0);
}
です すみませんでした
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
C言語の課題が出たのですが自力...
-
c言語
-
コンボボックスでデフォルト値...
-
C言語において、 配列要素をひ...
-
100の階乗のプログラムって
-
配列の要素数に変数を入れたい...
-
C言語 プログラミング 関数につ...
-
C言語についてです 5人のテスト...
-
C言語 ファイルの指定された行...
-
配列のアドレス部
-
int i, int i[1];
-
c言語プログラミング 等差数列...
-
2番目の最大値を求める
-
C#で構造体の配列を持った構造...
-
C言語 構造体でつまずいています
-
要素数・要素の値が未定の配列...
-
define で 配列
-
c言語 構造体
-
C言語の配列のコピーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#でのフィボナッチ数列
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
配列のアドレス部
-
char型配列をint型に代入するには
-
2番目の最大値を求める
-
C言語の課題が出たのですが自力...
-
C言語についてです 5人のテスト...
-
C言語から質問です。
-
C言語 ファイルの指定された行...
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
MFCのCArrayを使った二次元配列
おすすめ情報