Rumah > Soal Jawab > teks badan
当输入不满足第一个if语句的条件时,不是理想的重新给type1和type2赋值而是死循环。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//6.5.1
long int type1, type2, flag=0;
printf("请输入要测试的两个整数:");
while (flag==0) {
scanf("%li %li", &type1, &type2);
if( (type1 ==(long int) type1) && (type2 ==(long int) type2) && type2 != 0){
if( type1 % type2 == 0 ){
printf("%li可以被%li整除", type1, type2);
flag=1;
}else{
printf("%li不可以被%li整除", type1, type2);
flag=1;
}
}else{
printf("只能输入整数,并且第二个数不能为0,请重新输入:");
}
}
return 0;
}
}
伊谢尔伦2017-04-21 11:19:44
Anda perlu menilai nilai pulangan scanf untuk melihat sama ada terdapat input haram. Jika terdapat input yang menyalahi undang-undang, anda mesti mengosongkan kandungan yang dimasukkan sebelum ini, sebagai contoh, gunakan kod ini:
if (scanf("%li %li", &type1, &type2) != 2) { // illegal input
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
// intend to be blank
}
}
Sudah tentu, scanf
umumnya dianggap kurang selamat, jadi sekurang-kurangnya ia harus ditulis semula dengan fgets
dan sscanf
:
char buffer[256];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
// error or no more to read
// ...
}
if (sscanf(buffer, "%li %li", &type1, &type2) != 2) { // illegal input
// print error message
// continue
// ...
}
PS. (type1 ==(long int) type1) && (type2 ==(long int) type2)
Ayat ini agak berlebihan.
迷茫2017-04-21 11:19:44
Ini adalah masalah C bukan masalah Objektif-c.
Jika scanf menemui input yang tidak sah, ia akan gagal untuk melaksanakan, tetapi input yang tidak sah masih akan kekal dalam penimbal Apabila scanf meminta input sekali lagi, ia akan terus membaca penimbal tanpa menunggu input terminal.
Penyelesaian telah diberikan oleh Theo.