0

一直在从事一项任务,该任务一直是关于 SO 的各种其他问题的主题!我已经到了再次尝试将数字附加到数组的阶段,尽管这一次,代码在参数中传递信息的方式更加复杂。

编辑:代码也在下面

对此感到抱歉,但请完善代码: http: //pastebin.com/8SUjRyZQ

在论坛帖子上放置的内容太多了。

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

它应该在函数内将数字 int val 附加到数组中void AppendInt,认为它只是附加垃圾。

好吧,在 Notepad++ 中,它会打印 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;
}
4

2 回答 2

2

您可以使用sprintf

void AppendInt(char *line, int val, int length) {
    capitalise(line);
    sprintf(line+length, "%d", val);
}
于 2011-12-29T16:56:02.633 回答
0

你认为 val 不是一个字符,所以它是不可打印的......

解决这个问题: sprintf(&line[length],"%d",val);

您必须确保为包含 val 的行分配了足够的内存。

于 2011-12-29T17:13:24.653 回答