C:仅打印最后n行(尾程序)

时间:2017-11-26 18:58:12

标签: c

我正在为C做一些编程练习,我遇到了这个问题。

问题:根据用户输入的参数

仅打印最后n行

例如:参数2

用户输入:我\ nAm \ nLearning \ nC \ n编程

I
Am
Learning
C
Programming

输出:C \ n编程

C
Programming

因此,基于用户提供的参数,在这种情况下为2,它应该只提供最后2行。到目前为止,我现在拥有的是用户可以输入参数。

我现在的代码

char input;
char main(int argc, char const *argv[]) {
   if(argc == 2) {
     input = *(argv[1]);
     return NULL;
   } else {
     return "Need one argument\n";
   }
}

我正在考虑创建一个结构来保存线条及其长度。我有点了解它,但我不知道如何在C中实现它。

谢谢!

2 个答案:

答案 0 :(得分:0)

好的,答案就是这段代码:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  int current_line;
  int from_line;
  char *text;
  int i;

  if (argc < 3) {
    printf("%s\n", "Should provide at lest 2 arguments");
    return 1;
  }

  from_line = atoi(argv[2]);
  text = argv[1];
  current_line = 0;
  i = 0;

  while (text[i++] != '\0');

  while (i >= 0) {
    if (text[i] == '\n') {
      current_line++;
    }
    if (current_line == from_line) {
      break;
    }
    i--;
  }

  /*
    If text is "SOME TEXT" then text + 0 is also "SOME TEXT"
    but text + 1 would be "OME TEXT" and text + 5 "TEXT".
  */
  printf("%s\n", text + i + 1);

  return 0;
}

首先,它将检查用户是否将至少2个参数传递给程序。 然后它会分配argv[1],它应该将文本保存到char *text指针。 接下来,我们将argv[2]转换为整数并将其存储在int from_line变量中。

然后我们分配int i值0并运行循环以查找字符串的大小。

我们要进入循环,所以我们需要初始化int current_line, 它跟踪我们当前的行。

然后我们有循环,它会一直运行直到我们到达字符串的末尾或者我们找到了我们要查找的行, 循环将反向运行字符串(从结束到开始),因为我们正在寻找结尾的第n行。

大多数编程语言中的

'\n'表示换行,如果我们找到换行符,我们将增加current_line变量。

最后,我们需要从'\n'换行符之前的字符打印字符串。

答案 1 :(得分:-1)

由于我的徽章数量,我无法撰写评论,所以我想发布我的答案。希望这会有所帮助......

&#13;
&#13;
#include<stdio.h>
#include<conio.h>
#include<iostream>

using namespace std;

int main(){

	char First[1024],Second[1024];
	//Type zero when want to exit from loop

	int flag = 1;
	while(flag){
		scanf("%s",&First);
		scanf("%s",&Second);
		printf("enter 0 to exit\n");
		cin>>flag;
	}

	printf("%s  %s",First,Second);
	system("PAUSE");
	return 0;
}
&#13;
&#13;
&#13;