ページ 11

作り方が思い浮かばず困っています。

Posted: 2011年11月20日(日) 22:26
by SINA
プログラミング初心者ですが課題をだされ作り方が思い浮かばず困っています。
お手数ですがどなたかお力添えいただけないでしょうか。
課題というのは
nを入力してください: 5
----+
---++
--+++
-++++
+++++
という感じで入力したnに応じてn段の文字数を表示するというものです。
私も途中まで自分でやってみたのですがなかなか上手く行きません。どうかお願いします。
<途中までのソース>
/*kadai.c*/
#include<stdio.h>
int main()
{
int a,b,c,n;

printf("nを入力してください");
scanf("%d",&n);
for(c=1;c<=n;c++)
{
for(b=0;b<n;b++)
{
printf("*+");
for(a=n;a>1;a--)
{
printf("-");
}
printf("¥n");/*¥は半角ですがこちらで表示できなかったので全角で打ちました。*/
if(a+b!=n)
break;
}
}
return 0;
}

Re: 作り方が思い浮かばず困っています。

Posted: 2011年11月20日(日) 22:41
by non
過去のスレッドに同じような、(これよりは簡単な)質問があります。
まずは、このレベルを理解してください。
http://dixq.net/forum/viewtopic.php?f=3&t=9448

Re: 作り方が思い浮かばず困っています。

Posted: 2011年11月20日(日) 22:47
by SINA
参考にさせていただきます。有難うございました。

Re: 作り方が思い浮かばず困っています。

Posted: 2011年11月20日(日) 23:08
by たかぎ
一応、解答例を書いておきます。
ただし、このまま提出しても、自分で書いていないことが瞬時にわかるはずです。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

long input_n(void)
{
retry:
    fputs("nを入力してください: ", stdout); fflush(stdout);

    char s[100+1], c;
    if (scanf(" %100[0123456789]%c", s, &c) < 2 || c != '\n')
    {
        scanf("%*[^\n]%*c");
        goto retry;
    }

    errno = 0;
    char *endptr;
    long n = strtol(s, &endptr, 10);
    if (errno != 0 || *endptr != '\0')
        goto retry;

    return n;
}

int main(void)
{
    long n = input_n();

    for (long i = 1; i <= n; i++)
    {
        for (long j = 1; j <= n; j++)
            putchar(j <= n - i ? '-' : '+');
        putchar('\n');
    }
}