我如何让程序等到下一步,直到我输入(我在c中使用了fgets)

问题描述 投票:0回答:1

我编写了一个程序,但它不会等待接受我的输入。它需要现成的输入。但我只想一一输入。

#include<stdio.h>

void input(char a[]){
    printf("%s",a);
}
int main(){
    char c[50];
    int choice=1;
    while(choice!=0){
        printf("\nEnter the number corresponding your choice\n1.Input   2. Output 3.Arithmetic");           
        scanf("%d",&choice);
        switch(choice){
            case 1: 
                printf("write input statement of C:\n");
                fgets(c,11,stdin);
                input(c);    
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                break;
            default: 
                printf("invalid choice enter again \n");
        }           
    }
}

这里它需要像这样的输入“1 hello” 但我想先 5 只 1 然后等待它再次给我指示再次输入。

我只尝试了 fgets,但是当我尝试使用 scanf 时,它确实要求输入我想要的内容,但我不知道如何使用带有空格的 scanf 将输入作为字符串。

c string scanf fgets
1个回答
0
投票

要了解使用语言内置函数时遇到的问题,您可以随时参考文档以更好地了解发生的情况。

在这里,您尝试了

scanf()
但注意到当输入中有空格时它不起作用。阅读有关此功能的一些文档表明,
scanf()
旨在处理格式化字符串,并且其默认行为是在输入
space
后立即停止扫描。
fgets()
的作用是,如其文档中所示,扫描所有输入,直到输入特殊字符
\n
,所以基本上是读取一行。

格式化字符串是一种告诉计算机它将接收的数据的形状的方法。您可以在 printf()

wikipedia 页面
上阅读有关其可能性的更多信息,这是另一个使用这些格式化字符串的函数。

现在,具体针对您的问题,您的代码可能并不总是有效,因为

scanf("%d", pointer)
只读取输入中的数字;如果数字后面有
\n
字符,它将保留在输入缓冲区中,并且当调用
fgets()
时,它将获取的第一个字符是
\n
,停止执行。

你可以做的是,在调用

scanf()
之后,等待输入
\n
字符,丢弃它,然后继续进行
fgets()
调用,如下所示:

 while(getchar() != '\n'); 

getchar() 文档如果您想了解它到底是如何工作的。

© www.soinside.com 2019 - 2024. All rights reserved.