宿題をやっておりまして・・・・・。2

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

宿題をやっておりまして・・・・・。2

#1

投稿記事 by » 16年前

宿題なのですが、『宿題をやっておりまして・・・・・。』で、
Dixg(管理人)に言われたとうり、C++を入れて自力でやっていたんですが、
何回もやっても、どうしてもエラーが出てしまうので、
力をお貸しいただけないかと、またきてしまった訳でして、よろしくお願いします。

{
	char str[255];
	int i;

	printf("文字列の入力");
	getchar(str);
	i=0;
	while(str != \0){
		i++;
	}
	while(i>0){
		printf("%c",str);
		i--;
	}
}

getchar(str)のところで「error C2660: 'getchar' : 関数に 1 個の引数を指定できません。」

while(str!=\0)のところで「error C2017: エスケープシーケンスの使い方が正しくありません。」

となってしまいます。
なぜでしょうか。

non

Re:宿題をやっておりまして・・・・・。2

#2

投稿記事 by non » 16年前

>
> {
> 	char str[255];
> 	int i;
> 
> 	printf("文字列の入力");
> 	getchar(str);
getcharは1文字を入力します。文字列を入力するなら、gets(str)です。
> 	i=0;
> 	while(str != \0){
文字を表すには、'\0'のようにシングルクォーテーションで囲みます。
ただ、strはアドレスになりますから、
while(str!='\0')と書きます。
> 		i++;
> 	}
> 	while(i>0){
> 		printf("%c",str);
> 		i--;
> 	}
> }
>

> getchar(str)のところで「error C2660: 'getchar' : 関数に 1 個の引数を指定できません。」
>
> while(str!=\0)のところで「error C2017: エスケープシーケンスの使い方が正しくありません。」
>
> となってしまいます。
> なぜでしょうか。
>

dic

Re:宿題をやっておりまして・・・・・。2

#3

投稿記事 by dic » 16年前

getchar はファイルへのポインタを指定します

\0 ではエスケープシーケンスとして認識できません
'\\0' と指定しましょう

ファイルからの入力か
キーボードからの入力か分かりませんが
孫 さん予想した動きをするものを作ってみました
#include <string.h>

int _tmain(int argc, _TCHAR* argv[/url])
{
	char str[255];
	int i;

	printf("文字列の入力");
	scanf( "%s", str );
//	getchar(str);
	i=0;
//	while(str != '\\0'){
//		i++;
//	}
	i = strlen( str ) - 1;
	while(i>=0){
		printf("%c",str[i--]);
//		i--;
	}
	return 0;
}


参考になれば幸いです

BEMANI

Re:宿題をやっておりまして・・・・・。2

#4

投稿記事 by BEMANI » 16年前

>>getchar(str);
getchar()には引数を指定できませんので「関数に1個の引数を指定できません。」と出ます。
getcharは1文字ですので、文字列を入れたいのであれば gets(str)になります。


>>while(str != \0){
>> i++;
>>}
文字列の比較をやっているここですが、
エスケープシークエンス(\0)にシングルクォーテーションが入っていないためエラーになります。
書くのであれば while(str != '\0') と書きましょう。

あと、このwhile文では永久ループになってしまいます。
「str」に格納した文字が最後でないなら i++(文字数をカウント) としていますが、
このままだと、「i」が増えるだけで「str」は「\0」にならず、ループから抜けないないです。

書くのであれば while(str != '\0')です。
「i」は1→2→3・・・と増えていき、'\0'が来たら抜けます。



最後のwhileで画面に出力されていますが、
このままだと入力した文字が逆に出力されますが大丈夫でしょうか?
「i」は5→4→3・・・と減っていくので、abcdと入力すると「dcb」と表示されます。
逆に表示するという宿題であれば問題ないです。

また、while(i>0) としているので、配列の0番目の要素(最初に入力した文字)は表示されません。

Re:宿題をやっておりまして・・・・・。2

#5

投稿記事 by » 16年前

親切にどうもありがとうございます。
喉につっかえたものが取れました。

閉鎖

“C言語何でも質問掲示板” へ戻る