Почему при проверке последней строки программа всегда выдает NO?
К примеру если в файле написано ([abc]{def}) То должно вывестись YES однако выводится YES
)[abc]{def}( NO NO
{}[]() YES NO
И так при любом примере в последней строчке выводится NO. Пробовал отследить через отладку, но там в основном показываются значения указателей, так что где происходит ошибка найти не получается.
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct _INFO
{
char s;
struct _INFO* next;
}INFO;
typedef INFO* STACK;
int Push(STACK* stack, char s)
{
INFO* temp = (INFO*)malloc(sizeof(INFO));
temp->s = s;
if (!temp) return 1;
if (!*stack)
temp->next = NULL;
else
temp->next = *stack;
*stack = temp;
return 0;
}
int Pop(STACK* stack, char* s)
{
if (!*stack) return 1;
INFO* temp = *stack;
*s = temp->s;
*stack = temp->next;
free(temp);
return 0;
}
int main (void)
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
char str[1024];
char *estr;
while (1)
{
estr = fgets (str,sizeof(str),stdin);
if (estr == NULL)
{
if ( feof (stdin) != 0)
{
break;
}
}
STACK head = NULL;
bool flag = true;
char * sp = & (str[0]);
char s, s_1;
while ( ( * sp ) != '\n' )
{
char s = ( * sp ) ;
if (s == '(' || s == '{' || s == '[')
{
Push(&head, s);
}
if (s == ')' || s == '}' || s == ']')
{
if (!head) { flag = false; break; }
if (head->s == '(' && s == ')') Pop(&head, &s_1);
else if (head->s == '[' && s == ']') Pop(&head, &s_1);
else if (head->s == '{' && s == '}') Pop(&head, &s_1);
}
++ sp ;
}
if (!head && flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
У вас она не срабатывает, если последняя строка не завершается символом \n. Замените
while ( ( * sp ) != '\n' )
на
while(*sp)
и попробуйте еще раз.