小编Cap*_*nci的帖子

新行字符是否也刷新缓冲区?

我明白,问题,如,差异endl和\n已经多次回答SO.但是他们只提到endl能够将缓冲区冲到上面stdout,而\n不是.

因此,我通过刷新缓冲区理解的是,给定的输入存储在一个缓冲区中,并且stdout仅在它遇到endl时或者一些明确的flush函数传递给它.如果是这样,我预计以下代码:

#include <iostream>
#include <unistd.h>

int main(void)
{
    std::cout << "Hello\nworld";
    sleep(2);
    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示:

2秒后

Hello
World
Run Code Online (Sandbox Code Playgroud)

但实际产量是:

Hello
Run Code Online (Sandbox Code Playgroud)

2秒后

World
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

也不\n应该存储在缓冲区中,只有在endl遇到缓冲区时才会被刷新/显示在上面stdout,但是从我观察到的\n是同样的行为endl.

c++ flush endl

7
推荐指数
2
解决办法
2190
查看次数

无法理解 - 从C中的文件中读取字符

我刚刚开始学习C中的文件处理,并想知道我是否可以通过读取文件的输入来执行数学计算,这里是只读取字符并在控制台上显示的代码:

int main(void)
{
    FILE *p;
    char a, b, c, ch;

    p = fopen("numbers.txt", "a+");

    while((ch = getc(p)) != EOF)
    {
        fscanf(p, "%c %c %c\n", &a, &b, &c);
        printf("%c %c %c\n", a, b, c);
    }
    fclose(p);

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

numbers.txt包含(每个字符前有一个空格):

 2 + 3
 5 + 6
 6 + 7
Run Code Online (Sandbox Code Playgroud)

获得的输出是:

2 + 3
  + 6
  + 7
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么第一行输出符合预期,但第二行和第三行缺少字符,即使在numbers.txt中的每个表达式之后给出了新行.

c file-handling

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

如何定义一个测试给定字符是否为元音的宏?

下面的代码片段没有给出编译错误,但它也没有给出预期的输出,虽然这可以用简单的if-else方式完成,但我想用宏来做.这c是一个字符变量.

#define VOWELS 'a' || 'e' || 'i' || 'o' || 'u' || 'A' || 'E' || 'I' || 'O' || '
if (c == VOWELS) {
   printf("vowel = %c\n", c);
}


Run Code Online (Sandbox Code Playgroud)

c macros

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

C++:null字符如何在std :: string中工作?

我来自C背景,在学习C++时我遇到了<string>头文件.在C字符串中,将是一个以字符结尾的字符数组'\0'.

但是,在std::string我发现情况并非如此,并且在任何有效索引处插入/替换空字符时,不会像我期望的那样修剪字符串.

string s;

getline(cin, s);

// remove all punctuation 
for(string::size_type i = 0, n = s.size(); i < n; i++)
{
     if(ispunct(s[i]))
         s[i] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

输入:你好,世界!!!!

输出:Hello World

预期产量:你好

在观察上述行为时,我假设C++中的字符串不是空终止的.然后我发现这个问题在字符串中使用空字符(C++)这让我感到困惑.

string s = "Hello\0, World";

cout << s << endl;
Run Code Online (Sandbox Code Playgroud)

输出:你好

预期产量:你好,世界

如果有人能解释这种行为背后的原因,将会有所帮助.

c++ string

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

spring 依赖注入会创建单例对象吗?

spring如何在内部管理这些对象?

什么时候创建和销毁单例对象?

java spring dependency-injection

2
推荐指数
1
解决办法
6417
查看次数

标签 统计

c ×2

c++ ×2

dependency-injection ×1

endl ×1

file-handling ×1

flush ×1

java ×1

macros ×1

spring ×1

string ×1