アプリ版:「スタンプのみでお礼する」機能のリリースについて

ユーザ関数は語句を入力、長さを調べる、反転の三つを使用。
実行しても何も起こらないのですがどこを直せばよいでしょうか?
#include <stdio.h>
#define N 100
void input_phrase(char *p)
{
printf("99文字以内で入力");
scanf("%s", p);
}
int len(char *p)
{
int n = 0;
while(*p !='\n')
{
p++;
n++;
}
return n;
}
void inverce(char *p_in, char *p_out)
{
int i, t;
t = len(p_in);
p_out += t - 1;
for (i = 1; i <= t; i++)
{
*p_out = *p_in;
p_in++;
p_out--;
}
}
int main(void)
{
char *p_in, *p_out;
char s1[N];
char s2[N];
void input_phrase(char s1);
int n = 0, len(char *p);
p_in = s1;
p_out = s2;
inverce(p_in, p_out);
printf("%s", s2);
return 0;
}

A 回答 (3件)

実行しても何も起こらない原因は、p_in, p_outが初期化されていないためです。

また、s1, s2もscanfではなくgetsを使用する必要があります。次のように修正してみてください。
#include <stdio.h>
#define N 100
void input_phrase(char *p)
{
printf("99文字以内で入力");
gets(p);
}
int len(char *p)
{
int n = 0;
while(*p !='\n')
{
p++;
n++;
}
return n;
}
void inverce(char *p_in, char *p_out)
{
int i, t;
t = len(p_in);
p_out += t - 1;
for (i = 1; i <= t; i++)
{
*p_out = *p_in;
p_in++;
p_out--;
}
}
int main(void)
{
char s1[N];
char s2[N];
input_phrase(s1);
int n = len(s1);
inverce(s1, s2);
printf("%s", s2);
return 0;
}
    • good
    • 0
この回答へのお礼

うまくいきました。ありがとうございます。

お礼日時:2023/01/29 22:09

input_phrase が


void input_phrase(char *p)

void input_phrase(char s1);
のように矛盾する形で宣言されているので, 処理系によってはエラーを吐くかもしれない.

ちなみに現在「gets」なる関数は (C の規格には) 存在しないよ>#1. 昔はあったんだけど「安全に扱うことが不可能」という理由で規格から削除された.
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくいきました。

お礼日時:2023/01/29 22:10

1. 不要な宣言がある


2. input_phraseが呼ばれていない
3.
> while(*p !='\n')
と書いているが、scanf("%s", p); だと \n は格納されないので、*p が '\n'になることはない
4. プログラムの正誤と関係ないが、inverce はスペルミス
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくいきました。

お礼日時:2023/01/29 22:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!