gpt4 book ai didi

c++ - 在 C++ 中使用 scanf() 和 printf() 的意外输出

转载 作者:行者123 更新时间:2023-11-30 03:38:57 25 4
gpt4 key购买 nike

我编写了以下简单的代码片段:

#include<cstdio>
#include<iostream>
using namespace std;

int main()
{
int w, h;

scanf("%d %d", &w, &h);

char shop[h][w];
for(int i=0; i<h; i++)
for(int j=0; j<w; j++)
scanf("%c", &shop[i][j]);
//cin>>shop[i][j];

for(int i=0; i<h; i++)
{
for(int j=0; j<w; j++)
printf("%c", shop[i][j]);
//cout<<shop[i][j];
printf("\n");
//cout<<"\n";
}

return 0;
}

按如下方式传递输入:

4 3
X1S3
42X4
X1D2

我希望输出是相同的,因为我没有修改代码中的任何内容。但是,当我打印它时,我得到以下输出:

X1S
3
42
X4
X

但是,在将 scanf()printf() 替换为 cincout 时,会正确生成所需的输出。对我可能出错的地方有任何输入吗?

使用 printf() 链接到代码:http://ideone.com/NvHQUl
使用 cout 链接到代码:http://ideone.com/PQWe9R

更新:h表示行数;而 w 表示列数。

最佳答案

scanf 中的 %c 格式说明符读取并分配下一个字符包括 空格和换行符。每scanf specs :

All conversion specifiers other than [, c, and n consume and discard all leading whitespace characters (determined as if by calling isspace) before attempting to parse the input.

因此scanf("%c", &shop[i][j]);会将每行输入末尾的换行符读取为常规字符,并将其分配给某个元素在数组中,它解释了 printf 输出。

要跳过空格,请改用 scanf("%c", &shop[i][j]);(注意 %c 之前的附加 空格)。

关于c++ - 在 C++ 中使用 scanf() 和 printf() 的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com