为什么我的数组打印不正确?
Why is my array being printed incorrectly?
我写了一个简单的程序来反转数组。例如,字符串 'hello' 将打印为 'olleh'。但是,当我输入类似 'hello' 的内容时,它会打印出一半的字符串,然后是一些不应该出现的神秘字符和其他废话。
我的源码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], temp;
int i = 0, j = 0;
printf("Enter a string:\n");
fgets(str, 100, stdin);
// scanf("%s", &str);
j = strlen(str) - 1;
while (i < j) {
temp = str[i];
str[i] = str[j];
str[j] = str[temp];
i++;
j--;
}
printf("The reversed string is: %s", str);
return (0);
}
我得到的一些输出是 'oll' 然后是一个小方块,里面有四个数字。这可能会有所不同,有时会打印 'olx' 或 'olH' 甚至 'ol' 并带有菱形问号。为什么我的程序不能正常工作?该数组是否已包含一些其他编码信息?
你的算法没问题。你只需要更换
str[j] = str[temp];
来自
str[j] = temp;
让我们仔细看看这两行:
temp = str[i];
...
str[j] = str[temp];
首先将 temp
设置为 str[i]
中的字符。另一个你使用temp
作为索引变成str
。但是 temp
不是索引,而是字符。所以最后一行应该是
str[j] = temp;
我写了一个简单的程序来反转数组。例如,字符串 'hello' 将打印为 'olleh'。但是,当我输入类似 'hello' 的内容时,它会打印出一半的字符串,然后是一些不应该出现的神秘字符和其他废话。
我的源码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[100], temp;
int i = 0, j = 0;
printf("Enter a string:\n");
fgets(str, 100, stdin);
// scanf("%s", &str);
j = strlen(str) - 1;
while (i < j) {
temp = str[i];
str[i] = str[j];
str[j] = str[temp];
i++;
j--;
}
printf("The reversed string is: %s", str);
return (0);
}
我得到的一些输出是 'oll' 然后是一个小方块,里面有四个数字。这可能会有所不同,有时会打印 'olx' 或 'olH' 甚至 'ol' 并带有菱形问号。为什么我的程序不能正常工作?该数组是否已包含一些其他编码信息?
你的算法没问题。你只需要更换
str[j] = str[temp];
来自
str[j] = temp;
让我们仔细看看这两行:
temp = str[i];
...
str[j] = str[temp];
首先将 temp
设置为 str[i]
中的字符。另一个你使用temp
作为索引变成str
。但是 temp
不是索引,而是字符。所以最后一行应该是
str[j] = temp;