【发布时间】:2015-01-31 17:32:19
【问题描述】:
我的文件将包含两个数字,它们之间有可变空格,或者只是一个空行。我需要知道输入何时只是一个空白行,然后不使用 fscanf 分配给这些变量。
在做:
FILE *pFile = fopen (my_file, "r");
if (pFile == NULL) perror ("Error opening file");
int succ = 1, num1 = 0, num2 = 0;
while (succ != EOF)
{
succ = fscanf(pFile, "%d %d", &num1, &num2);
}
非常适合正确检测所有数字,但不能正确检测换行符。 我试过了:
fscanf(pFile, "%d %d %*[^\n]", &num1, &num2);
但它总是正确地分配给这两个数字。我希望能够根据 succ 是否为 2(表示也分配了两个数字)或 0(表示空行)来创建一个 switch 语句来执行其他逻辑。
如果可能,我宁愿避免使用 getline;使用 iostream 与 stdio 函数混合的东西似乎效率低下。
我尝试了this guys suggestion,但没有成功,虽然从逻辑上讲我认为它会起作用,但它没有。
老实说,我什至不明白为什么像
"%d %d \n"
行不通。很简单……扫描文件直到换行,返回完成了多少作业,就是这样!
【问题讨论】:
-
在C语言中,我建议使用
fgets()!然后sscanf()或更精细的解析。不了解 C++。 -
不知道行多长,这是第二个参数需要的,我只需要换行之前的所有内容
-
您也可以重复使用
getchar()。这也许是您最好的选择。 -
根据这个答案:stackoverflow.com/questions/13221844/…,在格式说明符“%d %d”的末尾添加一个空格。
-
@ThomasMatthews - 一个好主意,但在实践中它根本不会改变程序的行为;因为我不想检测空行。这将吃掉该行的其余部分和空白行,然后继续