c - 如何编写接受包含整数和标点符号的用户输入的 C 程序?

标签 c linux assembly

解决方案

#include <stdio.h>
#include <string.h>
 int main()
{
    char value[50];
    char *end;
    int sum = 0;
    long conv;
    while(conv != 0 )
    {
            printf("Enter a measurement and unit(Ex: 4' or 3\";0' or 0\" when done): ");
            fgets(value, 50, stdin);
            conv = strtol(value, &end, 10);
            if(strstr(value, "\'") != NULL)
            {
                    conv = strtol(value, &end, 10);
                    sum = sum + (conv*12);
            }
            else if(strstr(value, "\"") != NULL)
            {
                    conv = strtol(value, &end, 10);
                    sum = sum + conv;
            }
    }
    printf("Total: %d, %s\n", sum, "inches" );
    return 0;
}

更新 新程序仍有问题..不确定从这里去哪里。它接受数字和引号,但它会一直将我输入的任何数字乘以 12,而它应该只在我输入单引号以指定英尺时才这样做。 UPDATE2 以下是编写 C 程序时应牢记的汇编函数:

void printStr(char *)
 Arguments:
 edi = address of null-terminated string to print
 Returns:
    Nothing

void printUInt(unsigned)
 Arguments:
 edi = Unsigned integer to print
 Returns:
  Nothing

 char getchar()
  Arguments:
  None
  Returns:
   eax = the next character

 uinsigned readUInt()
 Arguments:
 None
 Returns:
  eax = an unsigned int read from stdin.
       (eax is 0 on error)

我必须编写一个 C 程序,提示用户输入测量值(数字)和单位(' 或 ",代表英尺或英寸),然后在用户输入长度 ' 后打印出以英寸为单位的总长度0' 作为标记值。

这个程序只需要作为我构建具有类似结构的汇编程序的一种方式。问题是,它必须围绕 4 个函数构建,这些函数将被调用以帮助执行某些操作。

所以我的 C 程序应该以类似的方式构建,并牢记这些功能。这是我拥有的:

这是我的程序:

更新:

int main()
{
    char value[50];
    char *end;
    int sum = 0;
    long conv;
    while(conv != 0)
    {
            printf("Enter a measurement and unit: ");
            fgets(value, 50, stdin);
            conv = strtol(value, &end, 10);
            if(value[1]='\'')
            {
                    sum = sum + (conv*12);
            }
            if(value[1]='\"')
            {
                    sum = sum + conv;
            }
    }
    printf("Total: %d\n", sum);
    return 0;
}

旧:

int main()
{
    int sum = 0;
    int value;
    char symbol;

    while(value != 1)
    {
            printf("Enter measurement and unit: ");
            scanf("%d,%d", &value, &symbol);

            if(symbol == "'")
            {
                    sum = sum + value*12;
            }
            else if(symbol == ''' )
            {
                    sum = sum + value;
            }

            sum = sum + value;
    }
    printf("Total: %d", sum);
    return 0;
}

我希望我在这里有足够的信息供别人帮助我,即使我知道我们暂时缺少完整的功能。我知道 IA32 汇编转换不是我的主要问题,如果我遇到困难,我想我会把它留给另一个,但我希望更正这个高级语言程序会让我朝着正确的方向前进。提前致谢!

最佳答案

使用 %c 而不是 %d 获取字符。把这行改成这样。

if ( scanf("%d,%c", &value, &symbol) != 2 )
       continue;

比较时你必须这样做,

if(symbol == '\"')
{
           sum = sum + value*12;
}
else if(symbol == '\'' )
{
              sum = sum + value;
}

之后的输出,

Enter measurement and unit: 2,"
Enter measurement and unit: 3,'
Enter measurement and unit: 1,"
Total: 45

关于c - 如何编写接受包含整数和标点符号的用户输入的 C 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443359/

相关文章:

c - 尝试打印 double 时程序崩溃(但其他类型都可以)

c - C语言中if(a,b,c,d)是什么意思

c - 使用 QT Creator,如何制作不需要在目标平台上安装 .dll 的 Windows 可执行文件?

regex - 使用 sed 更改文件扩展名

assembly - ARM 统一汇编语言语法和解析器?

c - GDB 没有那个文件或目录

c - 常量 C 表达式是在编译时还是在运行时求值?

c - 将字符串分配给 C 中的结构成员(指针)

linux - 为什么 exec+tee 输出显示乱序?

php - RHEL 上突然出现 PHP 解析错误