Я пытаюсь написать квинну на основе кода Java в этой статье Википедии .Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void print(int x)
{
char * buf = itoa(x,NULL,10);
puts(buf);
}
int main(void)
{
rsize_t opening = 15;
rsize_t i = 0;
char * q[] =
{
"#include <stdio.h>",
"#include <stdlib.h>",
"#include <stdint.h>",
"",
"void printf(int x)",
"{",
" char * buf = itoa(x,NULL,10);",
" puts(buf);",
"}",
"",
"int main(void)",
"{",
" rsize_t opening = 15",
" rsize_t i = 0;",
" char * q[] =",
" {",
" };",
" while (i <= opening)",
" {",
" printf(q[i]);putchar(10);i++;",
" }",
" i = 0;",
" while (q[i] != NULL)",
" {",
" putchar(34);printf(q[i]);putchar(34);putchar(44);putchar(10);i++;",
" }",
" i = opening+1;",
" while (q[i] != NULL)",
" {",
" printf(q[i]);putchar(10);i++;",
" }",
" return 0;",
"}",
};
while (i <= opening)
{
printf(q[i]);putchar(10);i++;
}
i = 0;
while (q[i] != NULL)
{
putchar(34);printf(q[i]);putchar(34);putchar(44);putchar(10);i++;
}
i = opening+1;
while ( q[i] != NULL )
{
printf(q[i]);putchar(10);i++;
}
return 0;
}
Вывод этой программы следующий:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void printf(int x)
{
char * buf = itoa(x,NULL,10);
puts(buf);
}
int main(void)
{
rsize_t opening = 15
rsize_t i = 0;
char * q[] =
{
"#include <stdio.h>",
"#include <stdlib.h>",
"#include <stdint.h>",
"",
"void printf(int x)",
"{",
" char * buf = itoa(x,NULL,10);",
" puts(buf);",
"}",
"",
"int main(void)",
"{",
" rsize_t opening = 15",
" rsize_t i = 0;",
" char * q[] =",
" {",
" };",
" while (i <= opening)",
" {",
" printf(q[i]);putchar(10);i++;",
" }",
" i = 0;",
" while (q[i] != NULL)",
" {",
" putchar(34);printf(q[i]);putchar(34);putchar(44);putchar(10);i++;",
" }",
" i = opening+1;",
" while (q[i] != NULL)",
" {",
" printf(q[i]);putchar(10);i++;",
" }",
" return 0;",
"}",
"",
Как мы видим, программа просто прекращает печатать сразу после печати последней новой строкизавернутые в кавычки и сопровождаемые запятой: ("",).Предполагалось напечатать заключительную скобку (};) для массива (char * q []), за которой следуют все три цикла while без их оборачивания в видимые кавычки для завершения печати квин.В прошлом мне приходилось укорачивать строки кода, чтобы позволить квине завершить печать.Поэтому меня удивляет, что у меня возникла такая проблема с написанием квайна еще раз.