2011-12-29 39 views
0

一直在处理一个已经成为所有其他问题的主题SO! 我已经到了这个阶段,我试图给数组附加一个数字,尽管这一次,代码在参数中传递信息的方式更复杂。C - 数组,排序和修改

编辑:代码也低于

对不起这个,但请细代码:http://pastebin.com/8SUjRyZQ

有一点点太多放置在一个论坛帖子。

问题是,它不是追加数字,而只是垃圾,虽然这次我真的不明白为什么,因为我已经考虑了我之前关于此主题的所有建议。

它应该在void AppendInt函数中追加数字int val,认为它只是追加垃圾。

那么,在记事本++,它打印Word - PasswordBOH - BOH是一些随机垃圾,它像一个图像,BOH在黑色背景的白色文本。

任何帮助表示赞赏!

PS>如果需要,我可以在这里发布代码,但它是一个很大的块。

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

#define MAXLINES 5000 /* max no. lines to be stored */ 
#define MAXLEN 1000 /* max length of single line */ 

char *lineptr[MAXLINES]; 

void capitalise(char *line); 
void decision(int i, char *line, int val); 
void writelines(char *lineptr[], int nlines); 
void qksort(char *v[], int left, int right); 
void swap(char *v[], int i, int j); 
void AppendInt(char *line, int val, int length); 

int main(int argc, char *argv[]) { 

int nlines = 0, j, k, i = 0; 
char line[MAXLEN]; 
FILE *fpIn; 

printf("WLO v1.0 Alpha Release - Coded in C - Big Shout to StackOverFlow!\n"); 
printf("1.QuickSort List.\n"); 
printf("2.QuickSort - Capitalise Word[0]\n"); 
printf("3.QuickSort - Capitalise Word[0] - Append X\n"); 
scanf("%d", &k); 

if(k == 3) { 
    printf("Enter the value you wish to append (a single Integer): "); 
    scanf("%d", &i); 
} 

fpIn = fopen(argv[1], "rb"); 
while((fgets(line, 65, fpIn)) != NULL) { 
    j = strlen(line); 
    if (j > 0 && (line[j-1] == '\n')) { 
     line[j-1] = '\0'; 
    } 
    if (j > 8) { 
     if(k != 1) 
      decision(k, line, i); 
     lineptr[nlines++] = strdup(line); 
    } 
} 
qksort(lineptr, 0, nlines - 1); 
writelines(lineptr, nlines); 
return 0;  
} 

void decision(int i, char *line, int val) { 
if(i == 2) 
    capitalise(line); 
else if(i == 3) 
    AppendInt(line, val, strlen(line)); 
} 

void capitalise(char *line) { 
line[0] = toupper((line[0])); 
} 

void AppendInt(char *line, int val, int length){ 
capitalise(line); 
line[length] = val; 
line[length + 1] = '\0';  
} 

void writelines(char *lineptr[], int nlines) { 
FILE *fpOut; 
int i; 
fpOut = fopen("tmp.out", "wb"); 
for(i = 0; i < nlines; i++) 
    fprintf(fpOut, "%s\n", lineptr[i]); 
} 

void qksort(char *v[], int left, int right) {  
int i, last; 
void swap(char *v[], int i, int j); 
if (left >= right) 
     return; 
swap(v, left, (left + right)/2); 
last = left; 
for (i = left+1; i <= right; i++) 
     if (strcmp(v[i], v[left]) < 0) 
       swap(v, ++last, i); 
     swap(v, left, last); 
     qksort(v, left, last-1); 
     qksort(v, last+1, right); 
} 

void swap(char *v[], int i, int j) { 
char *temp; 
temp = v[i]; 
v[i] = v[j]; 
v[j] = temp; 
} 
+0

至少发布恢复伪代码。或算法... – 2011-12-29 16:47:58

+0

看原帖:) – PnP 2011-12-29 16:50:59

+0

你是什么意思垃圾?你能发布文件的第一行和第一行的内容吗? – 2011-12-29 16:52:07

回答

2

您可以使用sprintf

void AppendInt(char *line, int val, int length) { 
    capitalise(line); 
    sprintf(line+length, "%d", val); 
} 
0

你认为val不是字符,所以它不是打印...

来解决:sprintf(&line[length],"%d",val);

你必须确保你分配了足够的内存来包含val。