0

私のコードは次のとおりです。

   #include<stdio.h>
   #include <string.h>
   #include <math.h>
   #include <stdlib.h>
   int string_length(char*);
   void reverse(char*);
   int main(void)
   {
      char num[256];
      printf("%c[%d;%d;%dmPlease enter a number of rows: ", 0x1B, 5, 32, 40);
      gets(num);
      //gets number

printf("%c[%dm\n", 0x1B, 0);
//Resets color

//Variables
char revnum[50], q[50] = "\0", r[50] = "\v";
int i, x, j, z, w;

//Reverses inputted character string
reverse(num);

//Takes reversed inputted character string and out puts it as an integer
for(i = 0; num[i] != '\0'; ++i) {
    j = -(48-num[i]);
    double y = i;
    x = j*pow(10, y) + x;
}

//Takes integer version of inputted character string and assigns a counter's value (counting up to our integer version) to a character string
for (z = 0; z <= x; z++) {
    sprintf(revnum, "%d", z);

    //Takes the new character string for each number up to the inputted value and prints it vertically, but no differentiating between numbers and printing them horizontally to each other
    for (w = 0; revnum[w] != '\0'; ++w) {
        strcat(q, r);
        printf("%s", q);
        strcat(q, revnum[w]);
      }
   }

  }

  //Function which reverses a character string
   void reverse(char *num)
{
int length, c;
char *begin, *end, temp;

length = string_length(num);

begin = num;
end = num;

for ( c = 0 ; c < ( length - 1 ) ; c++ )
    end++;

for ( c = 0 ; c < length/2 ; c++ )
{
    temp = *end;
    *end = *begin;
    *begin = temp;

    begin++;
    end--;
}
}

 int string_length(char *pointer)
 {
int c = 0;

while( *(pointer+c) != '\0' )
    c++;

return c;
}

プログラムのポイントは、入力された数字の前にすべての数字を出力し、各数字の数字を縦に並べてから、数字自体を横に並べて出力することです。

助けてください!!!

4

1 に答える 1

0

あなたはいくつかの間違いを犯しました。このコードは機能します:

#include<stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int string_length(char*);
void reverse(char*);
int main(void)
{
  char num[256];
  printf("Please enter a number of rows: ", 0x1B, 5, 32, 40);
  gets(num);
  //gets number

//Variables
char revnum[50], q[50] = "\0";
int i, x, j, z, w;

//Reverses inputted character string
reverse(num);

//Takes reversed inputted character string and out puts it as an integer
x = atoi(num);

//Takes integer version of inputted character string and assigns a counter's value (counting up to our integer version) to a character string
for (z = 0; z <= x; z++) {
sprintf(revnum, "%d", z);

//Takes the new character string for each number up to the inputted value and prints it vertically, but no differentiating between numbers and printing them horizontally to each other
for (w = 0; revnum[w] != '\0'; ++w) {
    printf("%s\v", q);
char a[2];
sprintf(a,"%c",revnum[w]);
strcat(q,a);
  }
}

}

//Function which reverses a character string
void reverse(char *num)
{
int length, c;
char *begin, *end, temp;

length = string_length(num);

begin = num;
end = num;

for ( c = 0 ; c < ( length - 1 ) ; c++ )
end++;

for ( c = 0 ; c < length/2 ; c++ )
{
temp = *end;
*end = *begin;
*begin = temp;

 begin++;
 end--;
}
}

int string_length(char *pointer)
{
int c = 0;

while( *(pointer+c) != '\0' )
c++;

return c;
}

また、オプション-fno-stack-protectorを指定してコンパイルし、スタック smaching の検出を防ぎます。

于 2013-02-20T09:43:52.460 に答える