私はあなたがで取得しようとしているもののより良い実装はこのだと思う:
#include <stdio.h>
void print_lines(int n);
int main() {
/* take input here (how many lines etc) */
print_lines(7));
return 0;
}
void print_lines(int n) {
int i;
for (i = 0; i < n; ++i)
printf("\n");
}
あなたはprintf関数の内部で使用したい変種は、以下のようになります。
#include <stdio.h>
void print_lines(int n);
int main() {
/* take input here (how many lines etc) */
char* lines = print_lines(7);
printf("%s", lines);
free(lines) // <-- important
return 0;
}
char* print_lines(int n) {
int i;
char* res = malloc(sizeof(char) * (n + 1)); // <-- important, for \0 termination
for (i = 0; i < n; ++i)
res[i] = '\n';
res[n] = '\0';
return res;
}
しかし、私はむしろ、より汎用的なアプローチを使用したいと思います。ここでは、Nに2番目のパラメータとして関数に渡される任意の文字を渡すことができます。私はあなたにその部分を残します。
編集:ここでは、ユーザーが作成したバッファ付きバージョンです:
#include <stdio.h>
void print_lines(int n);
int main() {
/* take input here (how many lines etc) */
char buf[8]; // if you use GCC you can use char buf[N], these are variable length arrays, if not, use a similar malloc method above
print_lines(7, buf);
printf("%s", buf);
return 0;
}
void print_lines(int n, char buf[]) {
int i;
for(i = 0; i < n; ++i)
buf[i] = '\n';
buf[n] = '\0';
}
そして最後に、ファンタジー・ソリューション・落語が提案:上記の溶液で
#include <stdio.h>
void most_generic_printN(int n, char c, FILE* f) {
int i;
for(i = 0; i < n; ++i)
fprintf(f, "%c", c);
}
int main() {
most_generic_printN(10, 'a', stdout);
return 0;
}
を、stdoutは標準出力ストリームですこれはあなたがコンソールとして見るものです。これをファイルなどにリダイレクトすることができます。それと一緒に遊ぶ!
あなたはさらに明確になりますか?私はあなたが最後の行で何を意味しているかを正確に理解できません。 – skrtbhtngr
ええと、関数がすべきことは、プログラムのユーザがscanf関数を使って挿入する行数(\ n)をプリントアウトすることです。したがって、その場合は上の7行にする必要があります。 –
main関数では、次のように関数を呼び出すだけです:print_lines(7);それをprintf関数の引数として渡さないでください。また、print_lines関数のサイクルで-lが意味するものは何ですか? –