gpt4 book ai didi

c - 为什么 putchar 在我的选取框程序中创建一个新行?

转载 作者:行者123 更新时间:2023-11-30 18:51:54 28 4
gpt4 key购买 nike

这是我的代码:

#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 函数读取整行直到文件结尾或换行符 (\n) 字符。如果到达 \n,它将在返回之前将其附加到字符串的末尾。如果您不希望在字符串中出现换行符(在本例中您不需要),您将需要使用如下内容将其删除:

if (s[strlen(s)-1] == '\n')
s[strlen(s)-1] = '\0';

这将用 NULL 字节替换换行符,将字符串缩短一个字符,并且应该使您的代码按照您预期的方式工作。

关于c - 为什么 putchar 在我的选取框程序中创建一个新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674909/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com