[英]Using strcmp in an if statement
我对C相当陌生,我试图理解使用字符串和strcmp
在if
语句中比较两个字符串。
我的目标是能够根据用户输入的内容运行其他功能。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
void gasbill();
void electricitybill();
int main()
{
char input[20];
const char gasCheck[4] = "gas";
const char electricityCheck[13] = "electricity";
printf("Your bills explained!\n\n");
printf("In this application I will go through your gas and electricty bills.\n");
printf("I will explain how each of the billing payments work, \nand the calculations that go on,\n");
printf("to create your bill.\n\n");
printf("Please choose a bill to get started with:\n- gas\n- electricity\n\n");
fgets(input, 20, stdin);
if (strcmp (input, gasCheck)== 0){
printf("\nPreparing to run Gas bill!\n\n");
system("PAUSE");
system("cls");
gasbill();
system("PAUSE");
}
else if (strcmp (input, electricityCheck)== 0){
printf("\nPreparing to run Electricity bill!\n\n");
system("cls");
electricitybill();
system("PAUSE");}
else {
printf("\nError exiting...\n\n");
system("PAUSE");
}
return 0;
}
void gasbill()
{
float balanceBroughtForward, gasThisQuarter, subTotalPerQuarter;
char poundSign = 156;
printf("******Your gas bill, explained!******\n\n\n");
printf("Hello, and welcome to your gas bill, explained. Let's get started.\n");
printf("Please enter the balance brought forward from your previous statement: \n\n%c", poundSign);
scanf("%f", &balanceBroughtForward);
printf("\nHow this works:\n- The money that you did not pay last quarter for your gas bill\nhas been added to this quarterly payment\n\n");
printf("\nNext let's add this to the amount of gas you have spent this quarter. \n(how much gas have you used so far in this billing period?)");
printf(": %c", poundSign);
scanf("%f", &gasThisQuarter);
printf("\n\nNow what? The two values that you have entered\n(balance brought forward
and gas spent this quarter)\nare added together, %c%3.2f + %c%3.2f\n", poundSign,
balanceBroughtForward, poundSign, gasThisQuarter);
subTotalPerQuarter = (balanceBroughtForward + gasThisQuarter);
printf("This is");
}
void electricitybill()
{
printf("Empty");
system("PAUSE");
}
无论何时运行if语句,它总是执行gasBill函数而不是electricBill函数。
提前致谢。
fgets将返回以换行符( \\n
)结尾的字符串。 从其文档
从流中读取字符,并将它们作为C字符串存储到str中,直到已读取(num-1)个字符或到达换行符或到达文件末尾为止,以先发生的为准。
您可以测试尾随换行符并将其删除
fgets(input, 20, stdin);
size_t len = strlen(input);
if (input[len-1] == '\n') {
input[len-1] = '\0';
}
或改为使用scanf读取用户输入。
scanf("%19s", input);
作为旁白
const char gasCheck[4] = "gas";
const char electricityCheck[13] = "electricity";
可以更容易,更安全地声明为
const char *gasCheck = "gas";
const char *electricityCheck = "electricity";
(这种形式可以避免将字符串文字复制到堆栈变量中。更重要的是,如果对数组的长度进行硬编码,则可以消除潜在的错误源。)
fgets()从stdin读取字符,直到看到换行符或EOF,如果看到换行符,它将被存储在数组中。无论如何,fgets()将空字符附加到数组中。
因此,如果您想通过换行符结束输入,我的较小改动就在这里,请更改此
const char gasCheck[4] = "gas";
const char electricityCheck[13] = "electricity";
至
const char gasCheck[5] = "gas\n";
const char electricityCheck[14] = "electricity\n";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.