首页 > 解决方案 > if 语句触发了不需要的断点

问题描述

我想扫描用户的输入,将其存储在 char 数组中并检查它是否为 alpha。但是会出现错误:

Program: 
...\Projects\Testing\Testing\Debug\Testing.exe
File: minkernel\crts\ucrt\src\appcrt\convert\isctype.cpp
Line: 36

Expression: c >= -1 && c <= 255

(Press Retry to debug the application)

我单击“重试”,然后它转到错误所在的行。它说“Testing.exe 触发断点”。

我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>    
#include <Windows.h>    
#include <ctype.h>      

int sleep_seconds = 1 * 1000;

int main(void) {

    int while_bool = 1;

    while (while_bool == 1) {

        char kapital_str[100];
        double kapital;     

        printf("\nBitte geben Sie das Kapital (Anfangskapital) in CHF an: ");
        scanf("%s", &kapital_str);
        Sleep(sleep_seconds);
        
        if (isalpha(kapital_str)) {  // <- "Testing.exe triggers breakpoint"
            printf("\nFalsche Eingabe! Bitte beachten Sie, dass es sich um eine Zahl handeln muss");
        }
        else {
            scanf("%lf", &kapital);
   } 
}

我正在使用 Visual Studio 19

标签: c

解决方案


问题是它isalpha()需要一个 char (char 也是一个 int)而不是一个 char 数组并且你有一个 missing },所以代码看起来像这样:

#include <stdio.h>
#include <string.h>    
#include <Windows.h>  

#define MAX_CHAR_LEN 100

int main(void) {

    double kapital;     
    char kapital_str[MAX_CHAR_LEN];

    int while_bool = 1;
    while (while_bool) {

        printf("\nBitte geben Sie das Kapital (Anfangskapital) in CHF an: ");
        scanf_s("%s", &kapital_str, MAX_CHAR_LEN);
        
        int f_not_alph = 0;
        for(int i=0; i < strlen(kapital_str); i++){
            if (isalpha(kapital_str[i])) {
                f_not_alph = 1;
            } 
        }

        if (f_not_alph) {
            printf("Falsche Eingabe! Bitte beachten Sie, dass es sich um eine Zahl handeln muss \n");
        } else {
            sscanf_s((const char*)&kapital_str, "%lf", &kapital);
            printf("Correct -> %lf \n", kapital);
        } 

        f_not_alph = 0;
    }
}

我也更喜欢彗星在英语中,所以我可以更容易地理解代码在做什么。


推荐阅读