Я не могу найти способ остановить печать файла csv, когда он находит определенный символ

#c #csv

#c #csv

Вопрос:

Заголовок говорит сам за себя, я хотел знать, каков наилучший способ остановить печать файла csv, когда он находит определенный символ, например, я хочу остановить печать текста, когда он находит «;», вот мои попытки:

 void testeperguntas(){
    FILE *in;

    char str[MAXCHARS];
    if ((in = fopen("../data/perguntas.txt", "r")) == NULL) {
        printf("Erro: perguntas!");
    }
    if (in) {
        while (fscanf(in, "%s", str)!=EOF)
            printf("%s",str);
        fclose(in);
    }
}
 

и:

 void testeperguntas1(){

    char buf[400];

    FILE *in = fopen("../data/perguntas.txt", "r");


    while (fgets(buf, sizeof(buf), in))
    {
        char *token;

        token = strtok(buf, ",");
        while (token!= NULL) {
            printf("%s", token);
            token = strtok(NULL, ",");
        }
        printf("n");
    }

}
 

в обоих случаях я не могу найти способ, я был бы признателен за любую помощь thx

Комментарии:

1. Команда break

2. Спросите себя: что происходит, когда fscanf возвращает 0? Когда это происходит? (Обратите внимание, что EOF отрицательный).

3. Вы ожидаете найти ‘;’ до или после того, как вы его распечатали? Если ‘;’ находится в некоторой строке, вы хотите напечатать все символы перед ‘;’ в строке? Пожалуйста, уточните, что именно вы хотите сделать.

4. вы знакомы с функцией: strchr() ?

5. при сбое вызова fopen() выведите сообщение об ошибке на stderr , not stdout . При выводе сообщения об ошибке также выводите текстовую причину, по которой, по мнению системы, произошла ошибка stderr . perror() Функция выполняет оба вывода на stderr . Когда вызов завершается с fopen() ошибкой, не продолжайте выполнение кода. Скорее, поскольку это неустранимая ошибка, следующий оператор после вызова perror() должен быть: exit( EXIT_FAILURE );

Ответ №1:

Я не могу найти ключевое слово break внутри вашего цикла

 while (fscanf(in, "%s", str)!=EOF)
{
     printf("%s",str);
    if(strcmp(str,";")==0)
       break;

}
 

вот так

Комментарии:

1. проблема в том, что содержимое str[] должно быть ‘;’, за которым следует ». Предлагаю использовать strchr() и / или strcspn()