def done():
global i
quitvalue=str(input("Play Again?(y/n):"))
if quitvalue=='n' and i==0:
SystemExit
elif quitvalue=="y":
i=1
现在我的代码打印文件的第9行。是否有任何有效的方法来打印数组中的行号。 基本上,如果我有两个整数的数组,如0和1。 我想只打印那两行。 (数组大小是基于用户输入数字的动态)。
感谢
答案 0 :(得分:2)
如果您的行号数组按升序排序,您可以通过修改代码来执行此操作:
int lineNumbers[] = {1, 3, 5, 7, 9};
size_t numElements = sizeof(lineNumbers)/sizeof(lineNumbers[0]);
size_t currentIndex = 0;
...
while ( fgets ( line, sizeof line, file ) != NULL ) {/* read a line */
i++;
if (i == lineNumbers[currentIndex]) {
fputs ( line, stdout ); /* write the line */
if (++currentIndex == numElements) {
break;
}
}
}
这使您可以确定i
是否等于下一个所需的行,而不会反复遍历数组。
答案 1 :(得分:2)
如果确保对lineSeekArray
进行排序以使其值按升序排列,则可以使用从0到lineSeekArray
中的最大值的单个循环。现在你只会尝试阅读尽可能多的行。您还可以避免遍历lineSeekArray
。
您无法避免必须从文本文件的开头读取每一行。如果您以二进制格式存储它,您将具有随机访问功能。那是因为你可以只计算每一行的起始位置并直接读取它。
Initialising j = 0.
for(i = 0; i < size; ++i){
1. Attempt to read line from file and exit loop on failure.
2. If i == lineSeekArray[j] --> print line, increment j, exit loop if j >= size
}