你好我有一些javascript的经验,但我真的想学习如何用C编程,我试图学习的方法之一是将一些简单的javascript代码转换成C.我目前尝试转换一个简单的程序编译没有任何错误,但不会产生我想要的答案。 javscript代码生成正确的答案,我写它来解决项目euler问题5,可以在这里找到:https://projecteuler.net/problem=5
这是工作的js代码:
var number = 2520;
var count = 1;
var solved = false;
while (!solved) {
if (number % count === 0) {
if (count === 20) {
solved = true;
console.log(number);
} else {
count++;
}
} else {
number++;
count = 1;
}
}
这是C转换不起作用:
#include <stdio.h>
int main () {
unsigned int number = 2520;
unsigned int count = 1;
unsigned int solved = 0;
while ((solved = 0)) {
if (number % count == 0) {
if (count == 20) {
solved = 1;
printf("%number");
} else {
count++;
}
} else {
number++;
count = 1;
}
}
return 0;
}
答案 0 :(得分:1)
while ((solved = 0)) {
您可以使用您在js中使用的相同语法,即while (!solved)
或==
,但=
只是一项任务。
printf("%number");
这并不意味着你认为它意味着什么,这就是为什么它不是一个实际的错误(%n
是一个独特的说明符,没有相应的输入,你得到umber
作为输出)。要重现console.log()
,您需要:
printf("%d\n", (int)number);
或者
printf("%u\n", number);
请注意明确的\n
,因为printf()
不会添加换行符。
答案 1 :(得分:0)
替换
while (solved = 0)
与
while (!solved)
和
print("%number")
与
print("%u\n",number)
答案 2 :(得分:0)
我知道它已经回答了,但你应该知道原因。
while ((solved = 0))
将实际设置解决为0并返回0(这被解释为false)。所以while循环立即退出。
printf还为第一个字符串采用了一个非常严格格式化的字符串(只需键入有意义的字符串是错误的)。编译器已经知道如何知道字符串中的内容是除字符串以外的任何内容(C ++具有(几乎)无反射,与javascript不同:您的编写代码消失为1和0)。 printf需要将number作为第二个参数。试试printf("%i\n",number);
。那说&#34;打印一个整数后跟一个换行符。整数的值是数字。&#34;
欢迎来到C!你遇到的最大问题是Java脚本的最大问题:C是严格键入的,没有反射,而javascript没有任何类型,几乎所有东西都依赖于某种反射。