我试图在一段时间内提出一个问题,并在另一段时间内进行确认,这将基本上在条件被填充时重新设置第一个问题。
#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的行为?
我的程序的实际行为如下(以解释):
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 !谢谢各位(和女孩)!
发布于 2016-01-01 15:32:16
char Disque[] = "";
char qDisque[] = "";这两个数组只有一个字符'\0',而没有其他字符,因此大小为1。当您使用scanf在它们中输入时,'\0'没有空间,并且将这些空间传递给字符串操作函数将导致未定义的行为。
为了解决问题,您需要在声明时提到它们的大小。
编辑-
在初始化qDisque之前,您可以将其与strcmp中的"y"进行比较-
while (strcmp(qDisque, "y")) 所以,使用一个do-while循环来代替这个。
而且,如果您看到strcmp返回0,那么条件将为false,如果它返回1,则条件将为true。
所以在do-while循环中的条件应该如下-
do{
...
//you code
}while (strcmp(qDisque, "y")==0);因此,如果qDisque是"y",那么只会继续循环。
发布于 2016-01-01 16:40:55
如果一次只需要一个驱动器号,则可以使用单个char而不是数组的:
char Disque = 0;
char qDisque = 'y';
while(qDisque == 'y')
// ...并在"%c"或" %c"中使用scanf()。在以前的\n情况下,需要额外的空间。
https://stackoverflow.com/questions/34557421
复制相似问题