gpt4 book ai didi

c - 为什么我的程序在使用 scanf 后暂停?

转载 作者:行者123 更新时间:2023-11-30 15:02:52 28 4
gpt4 key购买 nike

#include<stdio.h>
#include<stdlib.h>

int main()
{
char *userInput;
userInput = (char*)malloc(sizeof(userInput));

printf("Commands:\n");
printf("\ta name - adds given name to list\n");
printf("\tr name - removes given name from list\n");
printf("\tp - prints out list\n");
printf("\te - exits\n");

printf("\n\nEnter a command: ");
scanf("%s\n",userInput);
printf("\nThe user input was: %s\n", userInput);

return 0;
}

我编译代码“gcc -std=gnu99 -m32 -Wall -g -o namelist namelist.c”每当我运行可执行文件时,都会显示所有第一个 printf,并且我会收到输入提示。每当我输入一个输入并按 Enter 键时,在输入另一个输入之前,我不会提示下一个 printf。

This is what is looks like when I run the program

最佳答案

虽然字符 (char) 或字符集 (char*) 来自 stdinscanf > 类似功能 \n (按 Enter 键的结果)保留在缓冲区中。因此,在下一次输入之前,程序应该清理 \n 以及输入缓冲区中可能存在的所有其他困惑(例如,在错误输入数字后,例如 12asw - scanf 接受 12 并将 asw\n 留在缓冲区中)。

考虑以下示例并注意,我建议使用 clnInpBuf():

#include <stdio.h>

void clnInpBuf()
{
char c;
while ((c = getchar()) != '\n' && c != EOF);
}

int main(void)
{
char str[10];
char ch;
scanf("%c", &ch);
fflush(stdin); // in some cases that works for input stream
// (but fflush is better to use only for output streams)
scanf("%9s", str);
clnInpBuf(); // this works always
printf("char was %c.\n", ch);
printf("string was %s.\n", str);
}

更新:

“命令处理器”的模板可以是:

int main(void)
{
char name[21];
char command;
while (1)
{
scanf("%c", &command);
clnInpBuf();
switch (command)
{
case 'a':
case 'r': scanf("%20s", name);
clnInpBuf();
printf("Command was:\n%c %s\n", command, name); // if ('a'==command) addRecord(name); else removeRecord(name);
break;
case 'p': // TODO: add output
break;
case 'e': return 0;
break; // this is not realy needed
default:
printf("Wrong command\n");
}

}
}

关于c - 为什么我的程序在使用 scanf 后暂停?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925618/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com