此程序尝试将文本文件的内容保存到字符变量数组中。然后应该使用my_getline()来打印字符数组的内容。我已经测试并看到内容实际上已保存到char *text
但我无法弄清楚如何使用my_getline()打印char *text
的内容。 my_getline是我们在课堂上编写的一个函数,我需要在这个程序中使用它。当我试图以教导的方式调用它时,它1
被打印到终端,但终端只是等待而没有打印任何其他内容。任何指导将不胜感激。另外,如果我错过任何有用的信息,请告诉我。
/* Include the standard input/output and string libraries */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* Define the maximum lines allowed in an input text and NEWLINE for getline funct. */
#define MAXPATTERN 15
#define MAXFILENAMELENGTH 15
#define NEWLINE '\n'
/* function prototypes */
void my_getline(char text[]);
int find_string(char text[], char pattern[], int length_text, int length_pattern);
int main()
{
FILE *fp;
long lSize;
char *text;
char fileName[MAXFILENAMELENGTH], pattern[MAXPATTERN];
char c;
int length_text, length_pattern, j, lineNumber = 1;
printf("Enter file name: ");
scanf("%s", fileName);
fp = fopen(fileName, "r");
if (fp == NULL)
{
printf("fopen failed.\n");
return(-1);
}
fseek(fp, 0L, SEEK_END);
lSize = ftell(fp);
rewind(fp);
/* allocate memory for all of text file */
text = calloc(1, lSize + 2);
if(!text)
{
fclose(fp);
fputs("memory allocs fails", stderr);
exit(1);
}
/* copy the file into text */
if(1 != fread(text, lSize, 1, fp))
{
fclose(fp);
free(text);
fputs("Entire read fails", stderr);
exit(1);
}
text[lSize + 1] = '\0';
printf("%s has been copied.\n", fileName);
rewind(fp);
printf("%d ", lineNumber);
for (j = 0; (j = getchar()) != '\0'; j++)
{
my_getline(text);
printf("%d %s\n", j+1, text);
}
printf("Enter the pattern you would like to search for: ");
scanf("%s", pattern);
printf("\nYou have chosen to search for: %s\n", pattern);
fclose(fp);
free(text);
return(0);
}
void my_getline(char text[])
{
int i = 0;
while ((text[i] = getchar()) != NEWLINE)
++i;
text[i] = '\0';
}
答案 0 :(得分:3)
很可能导致无限循环,因为您没有检查是否已达到EOF。
void my_getline(char text[])
{
int i = 0;
int c;
while ( (c = getchar()) != NEWLINE && c != EOF )
text[i++] = c;
text[i] = '\0';
}
答案 1 :(得分:3)
您的函数导致系统挂起,因为您正在调用getchar(),它会返回标准输入中的下一个字符。这真的是你想要的吗?
此时,您的程序期待来自用户的输入。尝试在控制台窗口中键入并按下以查看它从“挂起”
返回