我正在使用 win 8.1 64bit Eclipse Luna 4.4.0 并使用 gcc 4.6.4 进行编译,问题是例如
在这个简单的程序中,myprintf和scanfstatements 以错误的顺序出现在控制台上。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i;
printf("Enter int: ");
scanf("%d",&i);
printf("Hello %d\n",i);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
它这样做:
4
输入整数:你好 4
而不是这个:
输入整数:4
你好 4
我想在c中的stdout上打印"CLIENT>",没有换行.
的printf( "CLIENT>");
不打印enything.我该如何解决这个问题?
int main (){
printf("CLIENT>");
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个包含无限循环的小程序来等待用户的信号输入。我想在开始无限循环之前打印出有关当前工作目录的消息。该消息自行工作,但是当我将无限循环放入代码中时,该消息不会打印出来(但终端会无限循环)。代码是:
#include <stdio.h>
int MAX_PATH_LENGTH = 100;
main () {
char path[MAX_PATH_LENGTH];
getcwd(path, MAX_PATH_LENGTH);
printf("%s> ", path);
while(1) { }
}
Run Code Online (Sandbox Code Playgroud)
如果我取出,while(1) { }我会得到输出:
ad@ubuntu:~/Documents$ ./a.out
/home/ad/Documents>
Run Code Online (Sandbox Code Playgroud)
为什么是这样?谢谢!
Java的:
Process p = Runtime.getRuntime().exec("myCommand");
final InputStream in = p.getInputStream();
new Thread()
{
public void run()
{
int b;
while ((b = in.read()) != -1) // Blocks here until process terminates, why?
System.out.print((char) b);
}
}.start();
Run Code Online (Sandbox Code Playgroud)
CPP:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv)
{
printf("round 1\n");
// At this point I'd expect the Java process be able
// to read from the input stream.
sleep(1);
printf("round 2\n");
sleep(1);
printf("round 3\n");
sleep(1);
printf("finished!\n");
return 0;
// Only now …Run Code Online (Sandbox Code Playgroud) 在我的代码函数中需要一段时间才能执行,比如计算大文件中的单词数.我想向用户显示如下输出:
calculating word number ...
执行该功能然后打印: calculating word number ... OK
要做到这一点,我在我的主要:
int main(int argc, char * argv[])
{
int number_of_words;
FILE * dico = NULL;
dico = fopen(argv[1],"r+");
printf("calculating word number ...");
number_of_words = number(dico);
printf("OK\n");
return 3.14;
}
Run Code Online (Sandbox Code Playgroud)
并且计算单词数的函数是:
int number(FILE * dico)
{
int n=0;
char mot[20];
rewind(dico);
while (fgets(mot, 20, dico) != NULL)
{
n+=1;
}
return n;
}
Run Code Online (Sandbox Code Playgroud)
执行一个非常大的文件输入功能后,输出似乎没有参加.事实上,等待时间是在第一次之前printf("calculating word number ...");,然后当它结束时所有的printf一起完成.
为什么会这样?
我正在使用问题printf,fgets因为在我的代码printf之前写的是fget,但它没有运行,它在运行后fgets运行.
enum { max_string = 127 };
static char string[max_string+1] = "";
int main( int argc, char ** argv ) {
printf("Type a String: ");
fgets(string, max_string, stdin);
printf("The String is %s\n", string);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 通过取自定义:http://www.cplusplus.com/reference/iostream/ostream/flush/,为什么存在的功能,目的是什么,你会使用它,因为这是不明确的.为什么不在每次写入流时调用flush()?
我以为我在这里做了一些简单的事情,但 C 决定对我进行异步处理。我不确定发生了什么事。这是我的代码:
#include <stdio.h>
int main() {
printf("start");
sleep(5);
printf("stop");
}
Run Code Online (Sandbox Code Playgroud)
当我编译并运行时,我发现它sleep(5)就像一个魅力。但编译器认为跳过第一个printf()并出现乱序是个好主意,因此在运行时,程序会等待 5 秒,然后打印startstop。
这是怎么回事?我的理论是,程序使用 shell 启动打印操作,然后继续执行该程序,让 Bash 等待,直到程序不再忙于实际呈现字符串。但我真的不知道。
谢谢
我是一名菜鸟,自学使用《C 编程语言》第二版(K&R编写)进行 C 语言编程。在第 1 章第1.5.1 节文件复制中,作者非常简要地介绍了在值之间进行比较时的操作优先级,强调了使用括号的重要性,在本例中,以确保在比较之前对变量“c”进行赋值被评估。他们断言:
c = getchar() != EOF
Run Code Online (Sandbox Code Playgroud)
相当于
c = (getchar() != EOF)
Run Code Online (Sandbox Code Playgroud)
其中“设置为 0 或 1 会产生不良影响c,具体取决于 getchar 的调用是否遇到文件结尾”
然后作者提出练习 1-6 - 验证表达式getchar () != EOF是 0 或 1
根据作者之前的断言,这看起来几乎微不足道,所以我创建了以下代码:
#include <stdio.h>
main()
{
int c;
while (c = (getchar() != EOF))
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行该程序时,如果遇到 EOF,它只会输出我在命令窗口中键入的任何字符,而不是预期的 1 或 0 字符串。
虽然我是一个菜鸟,但我认为我明白了作者试图教授的逻辑,但我无法演示这个简单的任务。在这种情况下,变量不应该c采用比较表达式求值的值,而不是恰好getchar()获取的任何字符,特别是因为括号的位置?如果c确实采用比较的值,则putchar()应该只输出 0 或 1,但按照公式,它会输出我在命令窗口中键入的内容。我究竟做错了什么?我不明白什么?难道是我的编译器的问题?我正在 x64 …
我有这样的代码:
printf("Starting nets allocation...");
while(...)
{
...some operations...
}
puts("DONE");
Run Code Online (Sandbox Code Playgroud)
代码应该立即打印字符串"Starting nets allocation ..."然后,在循环之后,应该打印"DONE".
相反,程序首先执行循环,然后打印字符串"Starting nets allocation ... DONE"为什么会发生?我该如何解决这个问题?