首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当进入时循环像pacman一样被扫描。

当进入时循环像pacman一样被扫描。
EN

Stack Overflow用户
提问于 2016-01-01 15:28:35
回答 2查看 48关注 0票数 0

我试图在一段时间内提出一个问题,并在另一段时间内进行确认,这将基本上在条件被填充时重新设置第一个问题。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char Disque[] = "";

    char qDisque[] = "";

    system("clear");

    while (strcmp(qDisque, "y")) 
    {
        system("clear");

        printf("\nLetter for disk : \n");

        scanf("%s", Disque);

        while (strlen(Disque) > 1) 
        {        
            system("clear");

            printf("\nLetter for disk : \n");

            scanf("%s", Disque);
        }

        system("clear");

        printf("Use /dev/sd%s as install disk ? [y|n] : ", Disque);

        scanf("%s", qDisque);
    }
}

到目前一切尚好。除了我不能模仿pacman -S $PKG的行为时,它要求确认:意思是,如果我按下n,它就会停止,但是我可以按ENTER O类型,或者任何它会继续的。

我的脚本只接受“任意击键”,但输入只需添加空格(以下为scanf() )。

是否有不改变代码结构的解决方案(例如,只更改条件或添加函数)?如果不是,我应该改变什么,以使它模仿pacman的行为?

我的程序的实际行为如下(以解释):

代码语言:javascript
复制
Question ? :                      //ENTER keystroke
                                //ENTER keystroke
                                //ENTER keystroke
                                //ENTER keystroke
                                //ENTER keystroke
y                                 //y keystroke
Are you sure ?
                                //ENTER keystroke
                                //ENTER keystroke
                                //ENTER keystroke
n                                 //n keystroke
Okay no changes !

谢谢各位(和女孩)!

EN

回答 2

Stack Overflow用户

发布于 2016-01-01 15:32:16

代码语言:javascript
复制
char Disque[] = "";
char qDisque[] = "";

这两个数组只有一个字符'\0',而没有其他字符,因此大小为1。当您使用scanf在它们中输入时,'\0'没有空间,并且将这些空间传递给字符串操作函数将导致未定义的行为。

为了解决问题,您需要在声明时提到它们的大小。

编辑-

在初始化qDisque之前,您可以将其与strcmp中的"y"进行比较-

代码语言:javascript
复制
while (strcmp(qDisque, "y")) 

所以,使用一个do-while循环来代替这个。

而且,如果您看到strcmp返回0,那么条件将为false,如果它返回1,则条件将为true。

所以在do-while循环中的条件应该如下-

代码语言:javascript
复制
do{
  ...
  //you code
  }while (strcmp(qDisque, "y")==0);

因此,如果qDisque"y",那么只会继续循环。

票数 3
EN

Stack Overflow用户

发布于 2016-01-01 16:40:55

如果一次只需要一个驱动器号,则可以使用单个char而不是数组的:

代码语言:javascript
复制
char Disque = 0;
char qDisque = 'y';

while(qDisque == 'y')
// ...

并在"%c"" %c"中使用scanf()。在以前的\n情况下,需要额外的空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34557421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档