相关疑难解决方法(0)

控制台输出显示顺序错误

我正在使用 win 8.1 64bit Eclipse Luna 4.4.0 并使用 gcc 4.6.4 进行编译,问题是例如

在这个简单的程序中,myprintfscanfstatements 以错误的顺序出现在控制台上。

#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 console gcc

6
推荐指数
1
解决办法
1503
查看次数

c stdout打印没有换行?

我想在c中的stdout上打印"CLIENT>",没有换行.
的printf( "CLIENT>");
不打印enything.我该如何解决这个问题?

int main (){
printf("CLIENT>");
}
Run Code Online (Sandbox Code Playgroud)

c printf stdout

5
推荐指数
2
解决办法
2万
查看次数

为什么 printf 在无限循环之前不起作用?

我正在尝试制作一个包含无限循环的小程序来等待用户的信号输入。我想在开始无限循环之前打印出有关当前工作目录的消息。该消息自行工作,但是当我将无限循环放入代码中时,该消息不会打印出来(但终端会无限循环)。代码是:

#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)

为什么是这样?谢谢!

c io loops

5
推荐指数
1
解决办法
4611
查看次数

为什么从Process'InputStream块中读取altough数据是可用的

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)

java linux

5
推荐指数
1
解决办法
3180
查看次数

C程序没有按正确的顺序执行

在我的代码函数中需要一段时间才能执行,比如计算大文件中的单词数.我想向用户显示如下输出:

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一起完成.

为什么会这样?

c

5
推荐指数
1
解决办法
81
查看次数

在'printf'之后使用'fgets'作为'fgets'在'printf'之前运行的C语言问题

可能重复:
为什么printf在调用后不会刷新,除非换行符在格式字符串中?(在C中)

我正在使用问题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)

c printf fgets

4
推荐指数
2
解决办法
6657
查看次数

简单来说,ostream中flush()的目的是什么

通过取自定义:http://www.cplusplus.com/reference/iostream/ostream/flush/,为什么存在的功能,目的是什么,你会使用它,因为这是不明确的.为什么不在每次写入流时调用flush()?

c++ iostream flush ostream

4
推荐指数
1
解决办法
6259
查看次数

为什么 printf() 后面的行(对 sleep() 的调用)在打印任何内容之前执行?

我以为我在这里做了一些简单的事情,但 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 printf sleep

4
推荐指数
1
解决办法
1717
查看次数

C、K&amp;R 练习 1-6,卡住,困惑

我是一名菜鸟,自学使用《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 …

c putchar getchar

4
推荐指数
1
解决办法
1077
查看次数

"printf"不会立即打印字符串

可能重复:
为什么printf在调用后不会刷新,除非换行符在格式字符串中?(在C中)

我有这样的代码:

printf("Starting nets allocation...");
while(...)
{
    ...some operations...
}
puts("DONE");
Run Code Online (Sandbox Code Playgroud)

代码应该立即打印字符串"Starting nets allocation ..."然后,在循环之后,应该打印"DONE".

相反,程序首先执行循环,然后打印字符串"Starting nets allocation ... DONE"为什么会发生?我该如何解决这个问题?

c printf

3
推荐指数
1
解决办法
6106
查看次数

标签 统计

c ×8

printf ×4

c++ ×1

console ×1

fgets ×1

flush ×1

gcc ×1

getchar ×1

io ×1

iostream ×1

java ×1

linux ×1

loops ×1

ostream ×1

putchar ×1

sleep ×1

stdout ×1