我正在尝试安排这个只包含数字的字符数组,它按照我输入的顺序打印相同的数组而不做任何更改,我尝试在if语句中使用类型转换,它在运行时给了我正确的结果但是在线评委没有接受它。这里的错误是什么,为什么我的第二个解决方案不被接受?
#include <stdio.h>
#include <string.h>
int main() {
char x[101];
scanf("%s",x);
int l,i,j ;
l = strlen(x);
char temp ;
for(i=0;x[i];i++)
{
for( j=i ; x[j] ; j++){
if('x[j]'<'x[i]') //(int)x[j] and (int)x[i] didn't work on the
//online judge
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
printf("%s",x);
return 0 ;
}
答案 0 :(得分:1)
我不知道为什么数组元素周围有引号,但这并不是你想的那样,比较正在发生,因为多字符串被计算为一个实现定义的整数值,因此if语句是< strong>总是比较相同的值,这意味着它总是会给出相同的结果,你需要删除引号
if (x[j] < x[i])
另外,我建议将数组的长度指定为scanf()
并检查它是否已成功读取该值,如下所示
if (scanf("%100s", x) != 1)
return -1; /* Perhaps EOF, i.e. you pressed Ctrl+D or (Ctrl+Z MS Windows) */
如果你不检查你的程序会调用未定义的行为,如果这里没有伤害你的简单程序的任何关键部分,如果你不学习这样做,那么你会有很多困难当你编写一个更大的程序时,将来会调试bug。
答案 1 :(得分:0)
if
语句中的引号评估为多字符常量,在我的编译器(VC ++ 2013)中分别为785B6A5D
和785B695D
,这些是这些字符的ASCII码粘在一起。因此if
永远不会执行。另外,你的意思是“没有用”?你有编译错误吗?如果是的话,它说了什么?否则,您可能已超出时间限制,因为冒泡排序非常慢。