#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
, notstdout
. При выводе сообщения об ошибке также выводите текстовую причину, по которой, по мнению системы, произошла ошибка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()