小编Yew*_*ong的帖子

打印%d时printf的行为而不提供变量名称

我刚刚遇到一个奇怪的问题,我正在尝试printf一个整数变量,但是我忘了指定变量名,即

printf("%d");
Run Code Online (Sandbox Code Playgroud)

代替

printf("%d", integerName);
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是程序编译,有输出,它不是随机的.事实上,它恰好是我想要首先打印的整数,恰好是m-1.

printf只要程序继续运行,错误语句就会一直输出m-1 ...换句话说,它的行为就像语句读取一样

printf("%d", m-1);
Run Code Online (Sandbox Code Playgroud)

谁知道这种行为背后的原因?我在没有任何命令行选项的情况下使用g ++.

#include <iostream>
#define maxN 100
#define ON 1
#define OFF 0

using namespace std;

void clearArray(int* array, int n);
int fillArray(int* array, int m, int n);

int main()
{
    int n = -1, i, m;
    int array[maxN];
    int found;

    scanf("%d", &n);

    while(n!=0)
    {
        found=0;
        m = 1;
        while(found!=1)
        {
            if(m != 2 && m != 3 && m != 4 && m != 6 && m != …
Run Code Online (Sandbox Code Playgroud)

c printf

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

在C++中,这是顺序访问2D数组的方式(内存块方式)

编辑:我从问题标题中删除了更快/更高效,因为它有误导性..我的意图不是优化而是理解数组.抱歉,添麻烦了!

int array[10][10], i, j;

for(i=0;i<10;i++)
{
    for(j=0;j<10;j++)
        std::cin>>array[i][j];
}
Run Code Online (Sandbox Code Playgroud)

int array[10][10], i, j;

for(i=0;i<10;i++)
{
    for(j=0;j<10;j++)
        std::cin>>array[j][i];
}
Run Code Online (Sandbox Code Playgroud)

我很确定答案与如何在硬件级别实现数组有关; [] []语法只是程序员的抽象,以帮助可视化/建模.但是,我忘记了上面的代码从开始到结束依次访问内存块...

感谢所有的答案...

只是为了证实我的理解,这是否意味着第一个代码相当于

int array[10][10], k;

for(k=0;k<100;k++)
{
    std::cin>>*(array+k);
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays

9
推荐指数
2
解决办法
4608
查看次数

使用fseek回溯

使用fseek原路返回字符fscanf操作可靠吗?

例如,如果我只有fscanf10个字符,但我想回溯10个字符,我可以fseek(infile, -10, SEEK_CUR)吗?

它适用于大多数情况,但我似乎对角色有问题^M.显然fseek将它注册为char但fscanf不注册它,因此在我之前的示例中,包含a的10个char块^M将需要fseek(infile, -11, SEEK_CUR).fseek(infile, -10, SEEK_CUR)会使它缩短1个字符.

为什么会这样?

编辑:我fopen在文本模式下使用

c file-io fseek

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

标签 统计

c ×2

arrays ×1

c++ ×1

file-io ×1

fseek ×1

printf ×1