用C++从文件中的一行读取数字
reading numbers from line in a file in C++
我有一个函数process_input,它基本上获取文件的一行并打印该行的数字,如果它有2个数字,它会打印这些数字,否则它会打印3个数字。
我的问题是,出于某种原因,它使用-1令牌重复打印行,我明白了原因。我的逻辑有什么错误吗?或者我遗漏了什么,有没有更有效的方法来做到这一点?我真正想要的是从文件中得到号码。
文件:
4 4
6 4
5 10
10 3
4 8
1 2 5
2 3 6
2 4 2
3 4 1
我的输出:
4 4 - tokens: 2
6 4 0 - tokens: 2
5 10 0 - tokens: 2
10 3 0 - tokens: 2
4 8 0 - tokens: 2
1 2 5 - tokens: 3
1 2 5 - tokens: -1
2 3 6 - tokens: 3
2 3 6 - tokens: -1
2 4 2 - tokens: 3
2 4 2 - tokens: -1
3 4 1 - tokens: 3
3 4 1 - tokens: -1
3 4 1 - tokens: -1
正确输出:
4 4 - tokens: 2
6 4 0 - tokens: 2
5 10 0 - tokens: 2
10 3 0 - tokens: 2
4 8 0 - tokens: 2
1 2 5 - tokens: 3
2 3 6 - tokens: 3
2 4 2 - tokens: 3
3 4 1 - tokens: 3
程序:
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
using namespace std;
void process_input(int** &graph, int &V, int &E)
{
int n,k;
char line[6];
fgets(line,6,stdin);
int tokens = sscanf(line, "%d %d", &n, &k);
printf("%d %d - tokens: %dn",n,k,tokens);
int x,y,w = 0;
while (fgets(line,6,stdin) != NULL)
{
tokens = sscanf(line, "%d %d %d", &x,&y,&w);
printf("%d %d %d - tokens: %dn",x,y,w,tokens);
}
}
int main(int argc, char **argv)
{
int V, E;
int **graph;
process_input(graph,V,E);
exit(0);
}
问题是,一旦在循环中输入数字,就不会清除stdin
缓冲区。这里有C
和C++
的混合。
在C++中,你可以这样做:
while (fgets(line,6,stdin) != NULL)
{
tokens = sscanf(line, "%d %d %d", &x,&y,&w);
printf("%d %d %d - tokens: %dn",x,y,w,tokens);
std::cin.ignore();
std::cin.clear();
}
您必须包括iostream
。使用C
的方式并不完美,但这里有关于它的的SO帖子
在更仔细的检查中使用十六进制输出(这是针对C
的,您正在覆盖n
。这使得scanf
功能失败,这就是为什么您得到-1
,为什么它没有自己清除缓冲区。
int n,k;
char line[7];
fgets(line,7,stdin);
int tokens = sscanf(line, "%d %d", &n, &k);
printf("%d %d - tokens: %dn",n,k,tokens);
int x,y,w = 0;
while (fgets(line,7,stdin) != NULL)
{
tokens = sscanf(line, "%d %d %dn", &x,&y,&w);
printf("%d %d %d - tokens: %dn",x,y,w,tokens);
}
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 而(!inputfile.eof())只读取第一行?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- 从文本文件中读取一行并将其存储在 C++ 中的 2D 矢量中
- 从文件中的一行读取特定数据-C++
- 使用std::getline()读取一行
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 从文件读取并在一行中写入 cout
- 将 ifstream 文件和每一行读取到数组中
- 从文件 c++ 中的下一行读取
- 在同一行读取具有多个类型的文件
- 写入终端并从同一行读取
- 如何在c++中从最后一行读取文本文件
- 逐行读取数组,每一行读取3个值
- 在同一行读取字符串和整数
- 从一行读取hh:mm格式的时间