继续运行,直到用户输入q简单程序流程

时间:2015-01-16 12:00:48

标签: c

char buffer[50], x, a;
    int y,z;


    printf(">");
    fgets(buffer,50,stdin);
        if( 1 == sscanf(buffer,"%[Q]",&a) )
        {
            printf("quit");
        }

        else if( 1 == sscanf(buffer,"%d", &y) )
        {
            printf("Insert the number\n");
            insert(head,y);

        }
        else if( 2 == sscanf(buffer,"%[s] %d", &a, &z) )
        {
            printf("Search list for number\n");
            search(head,z);

        }
        else if( 2 == sscanf(buffer,"%[d] %d", &a, &y) )
        {
            printf("Need to delete number from list\n");

        }
        else if( 1 == sscanf(buffer,"%[p]",&a) )
        {
            printf("Print the list\n");

        }
        else if( 1 == sscanf(buffer,"%[?]",&a) )
        {
            printf("Help this dude\n");

        }
        else
        {
            printf("print error and show help message\n");


        }

上面的代码将用于一个简单的链接列表程序,但我似乎无法掌握所有这些循环的流程。程序应运行直到用户输入Q

如果他们进入" Q" (没有引号),然后退出程序;

如果输入数字(必须是整数),请在列表中搜索该数字。如果 它已经在列表中,告诉用户并且什么都不做;否则将该号码插入列表(插入它的位置并不重要);

如果他们输入命令" s"后跟一个数字(在s后面有一个空格),搜索该数字,然后告诉用户该数字是否在列表中找到;

如果他们输入命令" d"后跟一个数字,在列表中搜索该号码,如果找到,则将其删除;否则告诉用户没有找到号码;

如果他们进入" p"然后向他们展示整个清单;

如果他们进入?然后向他们展示一条简短的帮助信息,解释不同的命令选项;

否则会打印错误信息,并向他们显示您的帮助信息。

感谢您的帮助

注意:这不是一个完整的程序我尚未实现链接列表,这就是为什么只有print语句说明每个if循环需要做什么

2 个答案:

答案 0 :(得分:0)

所以你只是

#include <stdio.h>

int main()
{
    char buffer[50], x, a;
    int  y, z;


    printf("> ");

    while (fgets(buffer, 50, stdin) != NULL)
    {
        if ( 1 == sscanf(buffer, "%[Q]", &a) )
        {
            printf("quit");
            return 0;
        }
        else if ( 1 == sscanf(buffer,"%d", &y) )
        {
            printf("Insert the number\n");
            insert(head, y);
        }
        else if ( 2 == sscanf(buffer,"%[s] %d", &z) )
        {
            printf("Search list for number\n");
            search(head, z);
        }
        else if ( 2 == sscanf(buffer,"%[d] %d", &a, &y) )
        {
            printf("Need to delete number from list\n");
        }
        else if ( 1 == sscanf(buffer,"%[p]",&a) )
            printf("Print the list\n");
        else if ( 1 == sscanf(buffer,"%[?]",&a) )
            printf("Help this dude\n");
        else
            printf("print error and show help message\n");
    }
    return 0;
}

请注意,如果用户将EOF发送到终端, Ctrl + D on linux或 Ctrl ,这也会终止在Windows上+ Z

推荐:使用

fgets(buffer, sizeof(buffer), stdin);

如果您更改buffer的尺寸,则无需更改fgets()行。

答案 1 :(得分:0)

对于你的问题:

  

如果他们进入&#34; Q&#34; (没有引号),然后退出程序;

fgets(buffer,50,stdin);

如果输入为Q,则缓冲区中有换行符,因为您使用fgets()需要通过\n替换\0来进行压缩/删除。

然后你可以做

if(strcmp(buffer,"Q") == 0 )
{
   printf("Quit\n");
   return 0; 
}