我有这个功课,这让我头疼,因为我找不到我做错了什么。
基本上,它应该读取一定数量的字符,将'x'作为最后一个字符并将它们存储到堆内存中。
之后,程序应该使用ASCII表对其进行排序。
然后,它应该将每四个字符读作一个int。输入的字符数总是4的倍数,因此每次都可以使用。
最后,但并非最重要的是,它应该打印整数。
我的问题是:程序以错误的顺序打印整数。
这就是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int cont = 1;
int i, j, tmp;
char c;
char *dados = NULL;
do
{
scanf("%s", &c);
dados = (char*)realloc(dados, sizeof(char)*cont);
dados[cont - 1] = c;
cont++;
}
while(c != 'x');
for (i = 0; i < (cont - 1); i++)
{
for (j = 0; j < (cont - i - 1); j++)
{
if (dados[j] > dados[j + 1])
{
tmp = dados[j];
dados[j] = dados[j + 1];
dados[j + 1] = tmp;
}
}
}
int *charInt = (int*)dados;
int aux = sizeof(int);
for(i = 1; i <= (cont - 1); i = i + aux)
{
printf("%d\n", *charInt);
++charInt;
}
return 0;
}
答案 0 :(得分:0)
我做了一些修改。以下代码应该有效。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int cont = 0;
int i, j, tmp;
char c;
char *dados = NULL;
dados = malloc(sizeof(char));
do
{
scanf("%s", &c);
dados = (char*)realloc(dados, sizeof(char)*cont);
dados[cont] = c;
cont++;
}
while(c != 'x');
for (i = 0; i < (cont - 2); i++)
{
for (j = 0; j < (cont - i - 2); j++)
{
if (dados[j] > dados[j + 1])
{
tmp = dados[j];
dados[j] = dados[j + 1];
dados[j + 1] = tmp;
}
}
}
char *charInt = (char*)dados;
int aux = sizeof(char);
for(i = 0; i <= (cont - 2)*aux; i = i + aux)
{
printf("%d\n",*charInt);
++charInt;
}
return 0;
}