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循环需要做什么
答案 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;
}