首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当C中没有命令行args时,如何获取一组用户输入编号?国际标准化组织C17 WIndows

当C中没有命令行args时,如何获取一组用户输入编号?国际标准化组织C17 WIndows
EN

Stack Overflow用户
提问于 2022-02-22 16:37:44
回答 1查看 43关注 0票数 0

我将用标准来说明这一点:我对C编程非常陌生,所以请温柔一点。

我正在编写一个C程序,它应该能够将文件路径/文件名作为命令行arg,否则它应该接受用户输入。我的argv1文件名可以工作,但是如果用户没有将文件名作为arg添加,我不知道如何让它切换到stdin。输入应该是原始数据,而不是文件名。这是我的(非常新的)代码。作为一个新的程序员,我可能需要一些外推法的解释,我对此表示歉意。

代码语言:javascript
复制
int main(int argc, char* argv[]) {
    
    #ifndef NDEBUG
        printf("DBG: argc = %d\n", argc);
        for (int i = 1; i < argc; ++i)
            printf("DBG: argv[%d] = \"%s\"\n", i, argv[i]);
    #endif

    FILE* stream = fopen(argv[1], "r");
    
    char ch = 0;
    size_t cline = 0;
    
    char filename[MAX_FILE_NAME];
    filename[MAX_FILE_NAME - 1] = 0;
    
    
    if (argc == 2) {
        stream = fopen(argv[1], "r");
        if (stream == NULL) {
            printf("error, <%s> ", argv[1]);
            perror(" ");
            return EXIT_FAILURE;
        }
    }
    else if (argc ==1)
    
        printf("Enter a list of whitespace-separated real numbers terminated by EOF or \'end\'\n");
    
    //continue with program using user-input numbers 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-22 16:56:42

您的代码过于复杂和错误。你做的事情顺序不对。首先,您需要检查是否存在参数,并尝试只在这种情况下打开文件。

你想要这样的东西:

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

int main(int argc, char* argv[]) {

  FILE* input = stdin;   // stdin is standard input
                         // so if no arguments are given we simply read
                         // from standard input (which is normally your keyboard)

  if (argc == 2) {
    input = fopen(argv[1], "r");
    if (input == NULL) {
      fprintf(stderr, "error, <%s> ", argv[1]);
      perror(" ");
      return EXIT_FAILURE;
    }
  }
  else
    printf("Enter a list of whitespace-separated real numbers terminated by EOF or \'end\'\n");

  double number;
  while (fscanf(input, "%lf", &number) == 1)
  {
    // do whatever needs to be done with number
    printf("number = %f\n", number);
  }

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

https://stackoverflow.com/questions/71225026

复制
相关文章

相似问题

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