代码有什么问题吗?,No one 总输出不出来


#include<stdio.h>   //以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认    
                               识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋
int main()               //输入格式:
                            输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空                                        
                              单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

                             //输出格式:
                           根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”; 
                            若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。
{
    char c;
    int i=0;
    while(1)
    {
        scanf("%c",&c);
        i++;
        if(c=='.')
        break;
    }
    if(i>=12)    printf("A and B are inviting you to dinner...");
    else if(i>=2&&i<12)    printf("A is the only one for you...");
    else    printf("Momo... No one is for you ...");
    return 0;
}

其一,你可以试试只输入一个点,应该会出来no one。
其二,输入的while循环中的i有误--原本应该是表示输入的人名行数的,结果却变成了输入的字符(连同最后的那个点在内)的数量

代码没语法问题,只是你的句号算上了i加1,所以除非只输入一个句号,不然不能出那句话。建议把i++挪到while最后一句,那样你可以输入一个字符加一个句号还报no one

#include <stdio.h>
#include <string.h>

int main()
{
    char a[10] = {}, b[10] = {}, buffer[10];
    int i = 0;
    while (scanf("%s", buffer) == 1)
    {
        if (buffer[0] == '.')
            break;
        i++;
        if (i == 2)
            strcpy(a, buffer);
        else if (i == 14)
            strcpy(b, buffer);
    }
    if (i >= 14)
        printf("%s and %s are inviting you to dinner...\n", a, b);
    else if (i >= 2)
        printf("%s is the only one for you...\n", a);
    else
        printf("Momo... No one is for you...\n");
    return 0;
}