這裏是我的代碼:爲什麼putchar在我的選取框程序中創建一個新行?
#include <stdio.h>
#include <string.h>
void ignoreRestOfLine(FILE* fp)
{
int c;
while ((c = fgetc(fp)) != EOF && c != '\n');
}
int main(void)
{
int num_times, count =0;
int length;
scanf("%d ", &num_times);
char s[100];
for(count=0 ;count<num_times;count++){
if (fgets(s, sizeof(s), stdin) == NULL)
{
// Deal with error.
}
if (scanf("%d", &length) != 1)
{
// Deal with error.
}
ignoreRestOfLine(stdin);
size_t n = strlen(s);
size_t m = 5;
int i,j;
for ( i = 0; i < strlen(s)+1; i++){
putchar('[');
for ( j = 0; j < m; j++)
{
char c = s[(i + j) % (n + 1)];
if (!c)
c = ' ';
putchar(c);
}
printf("]\n");
}
}
}
第一行是表明我要輸入符號的數量。第二行是我輸入想要我的符號輸出的字符串的位置。第三行是選取框內的空格數目。例如:
Input:
1
Hello World!
5
Output:
[Hello]
[ello ]
[llo W]
[lo Wo]
[o Wor]
[ Worl]
[World]
[orld!]
[rld! ]
[ld! ]
[d! H]
[! He]
[Hel ]
[ Hell]
但是,這就是我的代碼實際上做:
Input:
1
Hello World!
5
Output:
[Hello]
[ello ]
[llo W]
[lo Wo]
[o Wor]
[ Worl]
[World]
[orld!]
[rld!
]
[ld!
]
[d!
H]
[!
He]
[
Hel]
[ Hell]
我怎樣才能解決這個簡單的錯誤?
從'fgets'描述:「如果讀取換行符,則將其存儲到緩衝區中」。這應該給你一個線索。 – isedev
由於['fgets'](http://en.cppreference.com/w/c/io/fgets)添加了它在緩衝區中讀取的換行符? –