Tag: 比较

比较C中不同数据类型的一般规则是什么?

可以说我有以下场景: int i = 10; short s = 5; if (s == i){ do stuff… } else if (s < i) { do stuff… } 当C进行比较时,它会转换较小的数据类型,在这种情况下,short是int还是将右边的数据类型转换为左边的数据类型? 在这种情况下int为short?

浮点数和双变量的比较

可能重复: float和double之间的区别 float与float文字的比较中的奇怪输出 我正在使用visual C ++ 6.0,在程序中我比较float和double变量例如这个程序 #include int main() { float a = 0.7f; double b = 0.7; printf(“%d %d %d”,ab,a==b); return 0; } 我得到1 0 0作为输出 并为 #include int main() { float a = 1.7f; double b = 1.7; printf(“%d %d %d”,ab,a==b); return 0; } 我输出0 0 0。 请告诉我为什么我得到这些奇怪的输出,有没有办法在同一个处理器上预测这些输出。 如何比较C中的两个变量?

比较两个C风格字符串的正确function是什么?

所以我陷入两难境地。 我需要比较两个C风格的字符串,我搜索了最合适的函数: memcmp //Compare two blocks of memory (function) strcmp //Compare two strings (function ) strcoll //Compare two strings using locale (function) strncmp //Compare characters of two strings (function) strxfrm //Transform string using locale (function) 我认为第一个是地址,所以这个想法就出来了。 第二个听起来对我来说是最好的选择,但无论如何我想听到反馈。 其他三个让我无能为力。

比较两个花车

#include bool Equality(double a, double b, double epsilon) { if (fabs(ab) < epsilon) return true; return false; } 我试过这种方法比较两个双打,但我总是遇到问题,因为我不知道如何选择epsilon ,实际上我想比较小数字(小数点后6位数),如0.000001 。 我尝试了一些数字,有时我得到0.000001 != 0.000001 ,有时0.000001 == 0.000002除了与epsilon比较之外还有其他方法吗? 我的目的是比较两个双打(代表我的情况下的时间)。 表示以毫秒为单位的时间的变量t是double。 每次t改变时,它会增加另一个函数0.000001然后0.000002等。我想检查它是否等于double tt类型的另一个变量,如果tt == t,我有一些指令要执行.. 谢谢你的帮助

在C中,int和float之间的关系比较是否可以直接进行?

我正在使用Visual Studio 6和一些用c编写的旧时代码。 我发现代码看起来像这样的问题.. int x = 3; float y = 3.0; if(x == y){ do some crazy stuff } 这是一个有效的比较吗? 是否有可能在运行时浮点数的分配是3.0000001,这会失败?

比较C中的两个字符串?

由于未进行比较,此代码无效。 为什么? 所有名字都超过了if 。 printf(“Enter Product: \n”); scanf(“%s”, &nameIt2); printf(“Enter Description: \n”); scanf(“%s”, &descriptionI); printf(“Enter Quantity: \n”); scanf(“%d”, &qtyI); printf(“Enter Order Quantity: \n”); scanf(“%s”, &ordqtyI); while (fscanf(fp4, “%s %s %d %s\n”, &namet2, &description2, &qty2, &ordqty2) != EOF){ if(namet2 != nameIt2) fprintf(fpt2, “%s %s %d %s\n”, &namet2, &description2, qty2, &ordqty2); }

比较两个相同长度的int数组的最佳方法是什么?

将int数组b和c与a进行比较的最佳方法是什么? int a[] = {0,1,0,0,1}; int b[] = {0,1,0,0,1}; int c[] = {1,1,0,0,1}; b和c只是示例,假设它们可以是0和1的任意组合。 我试图检测与a相同的数组。 我用谷歌搜索了一段时间,但没有找到满意的答案。 这是我意识到的初学者问题,谢谢你的耐心等待。

C中的指针比较是签名还是未签名?

嗨,我确定这一定是一个常见的问题,但是当我搜索它时,我找不到答案。 我的问题主要涉及两个方面。 我想比较他们的地址,并确定一个是否比另一个大。 我希望在比较期间所有地址都是无符号的。 这是真的,它在C89,C99和C ++之间有所不同吗? 当我用gcc编译时,比较是无符号的。 如果我有两个指针,我正在比较这样: char *a = (char *) 0x80000000; //-2147483648 or 2147483648 ? char *b = (char *) 0x1; 然后a更大。 这是否由标准保证? 编辑以更新我想要做的事情。 我有一种情况,我想确定如果有算术错误,它不会导致指针超出界限。 现在我有数组的起始地址和结束地址。 如果出现错误并且指针计算错误,并且在数组内存的有效地址之外,我想确保不会发生访问冲突。 我相信我可以通过比较另一个函数返回的可疑指针并确定它是否在数组的可接受范围内来防止这种情况。 负面和正面地址的问题与我是否可以进行比较有关,正如我在原始问题中所讨论的那样。 到目前为止,我很欣赏答案。 根据我的编辑,你会说我正在做的是gcc和msvc中未定义的行为吗? 这是一个仅在Microsoft Windows上运行的程序。 这是一个简单的例子: char letters[26]; char *do_not_read = &letters[26]; char *suspect = somefunction_i_dont_control(letters,26); if( (suspect >= letters) && (suspect < do_not_read) […]

为什么这个if条件失败用于比较负整数和正整数

#include int arr[] = {1,2,3,4,5,6,7,8}; #define SIZE (sizeof(arr)/sizeof(int)) int main() { printf(“SIZE = %d\n”, SIZE); if ((-1) < SIZE) printf("less"); else printf("more"); } 用gcc编译后的输出是”more” 。 即使-1 < 8为什么if条件也会失败?

指针比较“>”与数组对象的第一个元素之前的一个

根据该主题 ,允许将指针与数组对象的最后一个元素之一进行比较。 根据@jalf注释,禁止在数组对象的第一个元素之前将指针与一个进行比较。 例1 int array[10]; int *ptr; for(ptr=&array[9]; ptr>(array-1); ptr–) {…} 例题 int array[10]; int *ptr; for(ptr=&array[9]; ptr>=(array); ptr–) {…} 1)是否禁止example1和example2 ? 2)C标准是否有证据表明禁止在数组对象的第一个元素之前比较指针?