我正在尝试通过将行的第一个字符与“-”进行比较来打印.txt文件的特定行,并且仅在不相同的情况下才进行打印。
console.log
我要打印的文件的格式是这样的,有20个Locals,每个都有最多1.3个不同的PDI。
void menu() {
FILE *fp =fopen("save_projeto.txt","r");
char line[MAX_LENGTH];
fgets(line, MAX_LENGTH, fp);
while(!feof(fp)){
if (strcmp(line[0], "-") == 0) {
fgets(line, MAX_LENGTH, fp);
}
else {
printf("%s", line);
fgets(line, MAX_LENGTH, fp);
}
}
}
构建代码时,它运行时没有错误消息,但是控制台根本不打印任何内容。
答案 0 :(得分:1)
strcmp
比较整个字符串,而不只是其中的单个字符。
写line[0] == '-'
作为仅测试第一个字符的条件。并注意'-'
中的单引号表示单个字符,而"-"
之类的双引号则表示以0结尾的字符串文字。
答案 1 :(得分:1)
比较应该针对第一个字符:
if (line[0] == '-') {
/* First char is a dash */
}
打印时是否可能在字符串中添加换行符?
printf("%s\n", line);
如果您希望将每一行立即写入输出流,请fflush
:
fflush(stdout);
答案 2 :(得分:0)
不要阅读过多的内容。一次一个字符即可:
#include <stdio.h>
/* Print lines that do not start with '-' */
int
main(int argc, char **argv)
{
int first_char=1;
int print;
int c;
FILE *fp = argc > 1 ? fopen(argv[1],"r") : stdin;
if( fp == NULL ) {
perror(argv[1]);
return 1;
}
while( (c = fgetc(fp)) != EOF ) {
if( first_char )
print = c != '-';
if( print )
putchar(c);
first_char = c == '\n';
}
return ferror(fp);
}
答案 3 :(得分:0)
@Corot解决问题的另一种方法是以下代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/* Path to the file you are reading */
#define FILENAME "save_projeo.txt"
/* Set the maximum length of text line in the input file */
#define MAX_LENGTH 92
/**************
* Main Driver
**************/
int main()
{
FILE *fp;
char buffer[MAX_LENGTH+1]; // buffer to hold data read from input file
const char *str = "-"; // String (here char) to be searched
size_t num = 1;
fp = fopen(FILENAME, "r");
// Is the file opened to read?
if( !fp){
fprintf(stderr, "Unable to open file <%s>\n", FILENAME);
exit(EXIT_FAILURE);
}
while(fgets(buffer, MAX_LENGTH, fp)){
// If the first num bytes of buffer does not match the first num byte of str
// then print the content of buffer
if(memcmp(buffer, str, num) != 0)
printf("%s\n", buffer);
}
fclose(fp);
return EXIT_SUCCESS;
}