我需要编写一个程序,让用户输入一个字符串,然后用islower
,isupper
,isdigit
检查单个字符,但是在第一个循环中,它总是崩溃,并在第二次转弯后一次给printfs
。
有人可以帮忙吗?
#include <stdio.h>
#include <string.h>
#ifndef MAIN_H_
#include "main.h"
#endif
int main()
{
char cString[MAX]; //alle Felder auf NULL gesetzt für spätere Überprüfung ob Entertaste gedrückt wurde
char cUebergabe[MAX];
int iLauf=0;
int iNULL=0;
while(iLauf<MAX)
{
cString[iLauf]=iNULL;
iLauf++;
}
iLauf=0;
printf("geben sie maximal 20 Zahlen zur auswertung des String ein, bei der Eingabe von Enter ohne ein Symbol wird das Einlesen abgebrochen\n");
while(iLauf<MAX)
{
printf("Geben Sie nun das %d . Zeichen ein\n",iLauf+1);
scanf("%c",&cString[iLauf]);
iLauf++;
if(cString[iLauf-1]==iNULL)
{
iLauf=MAX;
}
else
;
}
strcpy(cUebergabe,cString);
VerarbeitungAusgabe(cUebergabe, iNULL);
return 0;
}
答案 0 :(得分:0)
问题是%c
格式说明符会禁止跳过前导空白字符。在读取数字后,在下一次迭代中读取新行(当用户按下 Enter 时)。
从手册页:
匹配长度由最大字段宽度指定的字符序列(默认值为1);下一个指针必须是指向char的指针,并且必须有足够的空间容纳所有字符(不添加终止空字节)。通常跳过前导空格被抑制。要先跳过空格,请在格式中使用显式空格。
所以只需要一个空格:
scanf(" %c", &cString[iLauf]);
另请注意,您可以使用memset
轻松填充内存。所以你可以替换它:
while (iLauf < MAX) {
cString[iLauf] = iNULL;
iLauf++;
}
iLauf = 0;
用这个:
memset(cString, 0, sizeof(cString));
甚至是这样:
char cString[MAX] = {0};