2016-11-22 96 views
0

所以我被要求写在同一时间反转其输入行的程序,这就是我基本上想出了:printf的在Ubuntu不工作

#include <stdio.h> 
#include <string.h> 

#define MAXLINE 1000 

int getLine(char s[], int lim) 
{ 
     int c, i; 
     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; 
} 

int reverse(char line[], char reverse[]) 
{ 
     int i, j; 
     for (i = 0, j = strlen(line); i < strlen(line); i++, j--) { 
       reverse[i] = line[j]; 
     } 
     return 0; 
} 

int main() 
{ 
     int len; 
     char line[MAXLINE]; 
     char rev[MAXLINE]; 
     while (len = getLine(line, MAXLINE) > 0) { 
       reverse(line, rev); 
       printf("%s\n", rev); 
     } 
     return 0; 
} 

据我所知它的罚款和应该能够正常工作,但是当我运行它时,即使下一行被打印出来,那里也没有反转的字符串! 同样的问题仍然存在于其他程序以及我需要打印字符串,我不知道如果我应该问askubuntu论坛上的问题或在这里,所以我先在这里给它一个镜头!

+2

你认为这个问题是'的printf()'或'用反向()'?如果它是'printf()',为什么你在这个问题中包含'reverse()'?如果它是'reverse()',为什么标题引用'printf()'?用'printf()'写出可以显示你的问题的最短程序,或者想一想你的'reverse()'函数。 – slim

+0

我很确定它会是'lim - 1'。 –

回答

2

在反转功能中,您错过了复制'\0'的字符。这可能会导致printf不打印字符串。请记住,strlen给出的长度没有'\0'

修改反函数应该是这样的:

int reverse(char line[], char reverse[]) 
{ 
     int i, j; 
     for (i = 0, j = (strlen(line)-1); i < strlen(line); i++, j--) { 
       reverse[i] = line[j]; 
     } 
     reverse[i] = '\0' 
     return 0; 
} 
+2

我认为问题是,第一次迭代复制索引为'0'的终止符,所以它是一个空字符串,后面是反向字符串。请注意'line [strlen(line)]'是0结束符。 – mch

+0

仍然无法使用! –

+0

嗯,我会尽力回复你,谢谢:) –