这是我用C++编程时遇到过的最奇怪的事情.
这是我的主要文件:
#include <iostream>
#include "lib/utils.h"
using namespace std;
int main(int argc, const char *argv[]) {
cout << bin2dec(101000010);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是lib/utils.cpp:
#include <iostream>
#include "utils.h"
int bin2dec(int bin) {
// 101000010
int dec;
//std::cout << ""; // If you uncomment this, it works.
for (int i = 1; bin > 0; i *= 2, bin /= 10) {
if (bin % 2 == 1) {
dec += i;
}
}
return dec;
}
Run Code Online (Sandbox Code Playgroud)
程序编译时没有警告,运行时会输出450.450不是十进制的101000010,322是.第一个奇怪的是482和322之间的差异恰好是128.这种情况发生在您尝试转换的任何二进制数字上.但是,什么是真正奇怪的是,当我试图输出值bin和 …
假设我有一个名为foo.txt的文件,在utf8中编码:
aoeu
qjkx
ñpyf
Run Code Online (Sandbox Code Playgroud)
我想得到一个数组,其中包含该文件中的所有行(每个索引一行),其中包含字母aoeuñpyf,并且只包含带有这些字母的行.
我编写了以下代码(也编码为utf8):
$allowed_letters=array("a","o","e","u","ñ","p","y","f");
$lines=array();
$f=fopen("foo.txt","r");
while(!feof($f)){
$line=fgets($f);
foreach(preg_split("//",$line,-1,PREG_SPLIT_NO_EMPTY) as $letter){
if(!in_array($letter,$allowed_letters)){
$line="";
}
}
if($line!=""){
$lines[]=$line;
}
}
fclose($f);
Run Code Online (Sandbox Code Playgroud)
然而,在那之后,$lines数组中只有aoeu线.
这似乎是因为不知何故,$allowed_letters"ñ"与foo.txt中的"ñ"不同.
此外,如果我打印文件的"ñ",会出现一个问号,但如果我这样打印print "ñ";,它就会起作用.
我怎样才能使它工作?
我有一个函数,我想传递一个char*数组,但我不想创建一个变量只是为了这样做,像这样:
char *bar[]={"aa","bb","cc"};
foobar=foo(bar);
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我尝试了这个:
foobar=foo({"aa","bb","cc"});
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我也试过这个:
foobar=foo("aa\0bb\0cc");
Run Code Online (Sandbox Code Playgroud)
它会编译并发出警告,如果我执行该程序,它会冻结.
我尝试过使用星号和&符号,但我无法让它正常工作.
它甚至可能吗?如果是这样,怎么样?
在C/C++中使用以下代码,例如:
int foo[] = {0, 0, 0, 0};
Run Code Online (Sandbox Code Playgroud)
没有神奇的数字吧?
现在,Python的"等效"将是:
foo = [0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
仍然没有神奇的数字.
但是,在Python中,同样的事情可以写成:
foo = [0] * 4
Run Code Online (Sandbox Code Playgroud)
现在我们有一个神奇的数字.或者我们呢?
我猜这个和其他类似的东西出现在这些和其他语言上.
我正在使用Python和pyGTK开发一个项目.我有一个窗口,其唯一目的是显示图像.除非图像太大而不适合屏幕,否则默认情况下窗口不应显示滚动条.
所以我做的是这样的:
window = gtk.Window()
window.resize(image.size[0], image.size[1])
scrolled = gtk.ScrolledWindow()
scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scrolled.set_shadow_type(gtk.SHADOW_NONE)
area = gtk.DrawingArea()
area.set_size_request(image.size[0], image.size[1])
window.add(scrolled)
scrolled.add_with_viewport(area)
area.show()
scrolled.show()
window.show()
Run Code Online (Sandbox Code Playgroud)
但它不太有效.生成的窗口有点太小,因此滚动条显示出来.
为了工作,我必须将第二行改为:
window.resize(image.size[0] + 2, image.size[1] + 2)
Run Code Online (Sandbox Code Playgroud)
但这很丑陋,并不适用于所有系统.在我的Windows框中,我必须使用+ 3.
我该怎么做才能确保窗口足够大以容纳图像?
例如,如果我有:
C:\ 42\main.py
和
C:\ 42\info.txt
,我想从main.py读取info.txt,我必须输入"C:\ 42\info.txt "instad of just"info.txt".
这应该是那样的吗?
如果没有,我该如何解决?