gpt4 book ai didi

c - 即使有安全措施, scanf 也会被跳过 (getchar())

转载 作者:行者123 更新时间:2023-11-30 17:49:10 25 4
gpt4 key购买 nike

我知道这个问题被问了一百遍,并且我已经搜索了所有可能性,但我想我还不够熟练,无法知道这个问题出在哪里。我正在编写一个程序,需要用数据(整数和字符串)填充结构。我第一次尝试时,它跳过了除第一个之外的所有内容,但我并没有 panic ,因为我记得在类里面我需要使用 fflush(stdin) 来克服这个问题。我搜索过的网站投票反对使用 fflush(stdin),因为它具有未定义的行为。他们说使用 getchar() 会吃掉额外的换行符,从而解决问题。因此我的代码:

int manNode(){
Item *p;
int helper;
p = (Item*)malloc(sizeof(Item));
printf("Welk type? (Taak:1, Examen:2, Voordracht:3)\n");
scanf("%u",&helper); //selecting an itemtype
if (helper < 1 || helper > 3)
{
printf("wrong value, please try again");
return 0;
}
getchar(); //I've just put getchars everywhere for safety.
p->entrytype = helper-1;
helper = 0;
printf("Vul een naam in:\n");
scanf("%s", p->name); //this one fills in fine
getchar();
printf("Vul een vaknaam in: \n");
scanf("%s", p->course); //this one gets skipped if I type more than one letter in the last scanf()
getchar();
printf("Vul een starttijd in:\n"); //From here on out everything gets skipped
p->start = getTijd();
checkTijd(p->start);
printf("Vul een eindtijd in: \n");
p->end = getTijd();
checkTijd(p->end);

我知道这有点困惑,但请重点关注 scanfs 和 getchars。 getTijd() 中还有几个扫描整数的 scanf,它们也会被跳过。我不知道从这里该去哪里。 (代码并非不完整,其余的只是无关紧要)

最佳答案

你可以定义一个新的getchar

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

#define getchar(x) (scanf("%c", x))

int main ()
{
char x, y[10];
getchar(&x);
scanf("%s", y);
printf("got %s\n", y);
return 0;
}

更新:这可能是更好的方法

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

void work_to_do()
{
#define getchar(x) (scanf("%c", x))
char x, y[10];
getchar(&x);
scanf("%s", y);
printf("got %s\n", y);
#undef getchar
}
int main ()
{
work_to_do();
return 0;
}

解决scanf换行无知和getchar(但scanf仍然忽略空格)

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

#define __getchar() (read(2, NULL, 1)) // 2 stands for standard error, we can make the user enter a character.

void work_to_do()
{
char y[10];
__getchar();
scanf("%s", y);
printf("got %s\n", y);
__getchar();
}
int main ()
{
work_to_do();
return 0;
}

看看这个很好: Read space-separated values from file

关于c - 即使有安全措施, scanf 也会被跳过 (getchar()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039255/

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