#include <stdio.h>
#define MAXLINE 1024
int getline(char s[], int lim);
main()
{
int i, len;
char line[MAXLINE];
while ((len = getline(line, MAXLINE)) > 0) {
i = len - 2;
while (i >= 0 && (line[i] == ' ' || line[i] == '\t'))
--i;
if (i >= 0) {
line[i+1] = '\n';
line[i+2] = '\0';
printf("%s", line);
}
}
return 0;
}
int getline(char s[],int lim)
{
int i,c;
for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)
s[i] = c;
if( c == '\n')
{
s[i]=c;
++i;
}
s[i]='\0';
return i;
}
这是我的程序,我累了,但似乎显示相同的输入没有任何变化。我无法理解我做了什么错误.... 提前谢谢。
答案 0 :(得分:1)
getline
函数会增加i
'\n'
(返回的长度)'\0'
,但不会终止i = len - 2;
。
因此,在i = len - 1;
中你应该减去一个而不是两个......对吗?为了澄清,我建议您尝试@Override
public void onApplicationEvent(SessionSubscribeEvent event) {
Message<byte[]> message = event.getMessage();
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
StompCommand command = accessor.getCommand();
if (command.equals(StompCommand.SUBSCRIBE)) {
String sessionId = accessor.getSessionId();
String stompSubscriptionId = accessor.getSubscriptionId();
String destination = accessor.getDestination();
// Handle subscription event here
// e.g. send welcome message to *destination*
}
}
!
答案 1 :(得分:0)
以下是一些有用的提示。
getline()
,你正在推翻这个名字。如果您提高编译警告级别,那么您可能会看到警告。无论如何,假设您想拥有自己的行读取功能,可以将其更改为my_getline()
。如果你这样做,那么你的程序适合我。main()
的声明并不像int main()
中那样具有类型。没关系,默认类型是int
,但为了整洁&#39;为此,你应该把类型放在那里(同样,当你提高警告级别时,为了避免编译警告)。my_getline()
,它会返回一个指向已分配内存的指针,该内存包含它读取的整行文本。在main()
中,您可以删除尾随空格等,然后free()
内存。在这种情况下,my_getline()
的原型当然是char *my_getline()
。答案 2 :(得分:0)
在删除空格字符(空格,制表符)后检查字符数,然后在删除空格之前与不使用字符进行比较。如果他们的不同,你的计划有效..
由于我们在这里处理空白字符,你将无法看到输入和输出的差异。
答案 3 :(得分:0)
以下解决方案适用于我。请注意,我尚未定义任何新功能。
#include <stdio.h>
#define MAXLINE 1000
#define INLINE 1
#define OUTLINE 0
int main(void) {
int i = 0, j, c;
char line[MAXLINE];
int status = OUTLINE;
while((c = getchar()) != EOF) {
if (c != '\n') {
line[i] = c;
i++;
} else if (c == '\n'){
line[i] = '\n';
line[i+1] = '\0';
for (j = i; j >= 0 && status == OUTLINE; j--) {
char lc = line[j];
if (lc == ' ' || lc == '\t') {
line[j] = '\n';
line[j+1] = '\0';
status = INLINE;
}
}
printf("%s", line);
for (j = 0; j < MAXLINE; j++) {
line[j] = 0;
}
i = 0;
}
}
return 0;
}