第一个while循环后无法输出


#include<iostream>
using namespace std;
struct Node {
    char x = ' ', y = ' ';//x存储0   y储存-或*,分别代表史莱姆和通电状况
    int d_flag = 0;//相异的flag,0是前后相同,1,反之,前后相异
    struct Node* next=NULL;
};
struct Node* head = NULL , * p = NULL, * r = NULL;


int main() {

    //1.输入史莱姆及其关系
    cout << "输入史莱姆0和通电情况-,输入x则停止输入"<<endl;
    char x1='y', y1='y';
    //cin >> x1 >> y1;
    head = new Node;
    r = head;
    while (x1 != 'x') {
        p = new Node;
        x1 = getchar();
        y1 = getchar();
        p->x = x1;
        p->y = y1;
        p->next = NULL;
        if(r!=NULL)
        r->next = p;
        r = p;
        
    }
    
    p = head->next;

    //2.通过是否通电,判断前后是否相异

    while (p->next != NULL) {
        if (p->y == '-')p->d_flag = 1;
    }

    p = head->next;
    while (p->next!= NULL) {
        cout << p->d_flag << " ";
        p = p->next;
    }
    //cout << p->d_flag;
}

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/666328932036177.png 'image.png')

修改如下,供参考:

#include<iostream>
using namespace std;
struct Node {
    char x = ' ' , y = ' ';//x存储0   y储存-或*,分别代表史莱姆和通电状况
    int d_flag = 0;//相异的flag,0是前后相同,1,反之,前后相异
    struct Node* next = NULL;
};
struct Node* head = NULL , * p = NULL, * r = NULL;

int main() {
    //1.输入史莱姆及其关系
    cout << "输入史莱姆0和通电情况-,输入x则停止输入"<<endl;
    char x1='y', y1='y';
    //cin >> x1 >> y1;
    head = new Node;
    head->next = NULL;
    r = head;
    while (1) {          //while (x1 != 'x')
        if((x1 = getchar()) == 'x') break;
        y1 = getchar();
        p = new Node;
        p->x = x1;
        p->y = y1;
        p->next = NULL;
                         //if(r!=NULL)
        r->next = p;
        r = p;
    }
    p = head;             //p = head->next;
    //2.通过是否通电,判断前后是否相异
    while (p->next != NULL) {
        p = p->next;
        if (p->y == '-') p->d_flag = 1;
    }
    p = head;             //p = head->next;
    while (p->next != NULL){
        p = p->next;
        cout << p->d_flag << " ";
    }
    //cout << p->d_flag;
    
    return 0;
}